gpt4 book ai didi

python - Pygame:放置多个对象时出错:(

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:26 25 4
gpt4 key购买 nike

所以我开始用 Python/Pygame 编写一个放置方 block 的小游戏。我写了代码,理论上它看起来很完美。它应该能够在按下鼠标时放置多个 block 。这是代码:

import pygame
from pygame.locals import *
pygame.init()
screen=pygame.display.set_mode((640,480),0)
blocklistDIRT=[]
class block(object):

sprite = None

def __init__(self, x, y):
if not block.sprite:
block.sprite = pygame.image.load("dirt.png").convert_alpha()
self.rect = block.sprite.get_rect(top=y, left=x)

blocklist = []
while True:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONUP:
mse=pygame.mouse.get_pos()
blocklist.append(block(mse[0],mse[1]))
if event.type == QUIT:
exit()
for block in blocklist:
screen.blit(block.sprite, block.rect)
pygame.display.update()

每次我去放置第二个方 block 时..我都会收到这个错误:

追溯(最近一次调用最后一次):文件“C:\Users\samis_000\Desktop\blockgame.pyw”,第 20 行,在blocklist.append(block(mse[0],mse[1])) TypeError: 'block' 对象不可调用

有人告诉我我做错了什么:(

最佳答案

所有类的声明都应该按照惯例大写。此外,当您调用类的构造函数时,名称应与类的大写名称匹配。这是您的代码的一个版本应该可以工作:

import pygame
from pygame.locals import *
pygame.init()
screen=pygame.display.set_mode((640,480),0)
blocklistDIRT=[]
class Block(object):

sprite = pygame.image.load("dirt.png").convert_alpha()

def __init__(self, x, y):
self.rect = block.sprite.get_rect(top=y, left=x)

blocklist = []
while True:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONUP:
mse=pygame.mouse.get_pos()
blocklist.append(Block(mse[0],mse[1]))
if event.type == QUIT:
exit()
for block in blocklist:
screen.blit(block.sprite, block.rect)
pygame.display.update()

看看代码中大写的单词是如何以蓝色突出显示的?那是因为它们是类名,与您的实例 名称不同。

我还冒昧地删除了 Block 类声明中用于加载图像的奇怪逻辑。

关于python - Pygame:放置多个对象时出错:(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18949377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com