以下代码给了我这个错误,我很困惑。对不起,如果我提出错误的问题,我是新来的,但我认为这符合指南。图像会移动 一旦我释放了密钥,就会在背景中发出错误并崩溃。
Traceback (most recent call last):
File "C:\Users\Samga_000\Desktop\game\game.py", line 89, in <module>
rungame()
File "C:\Users\Samga_000\Desktop\game\game.py", line 79, in rungame
p.still()
TypeError: 'int' object is not callable
import pygame, sys
from pygame.locals import *
pygame.init()
WIDTH = 400
HEIGHT = 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
bif = "grass.png"
background = pygame.image.load(bif)
pygame.display.set_caption('RPG')
def drawEntitys():
frispri.update()
frispri.draw(screen)
def drawScreen():
screen.blit(background, (0,0))
class Player(pygame.sprite.Sprite):
image = pygame.image.load("misha.png")
image = image.convert_alpha()
def __init__(self):
pygame.sprite.Sprite.__init__(self, self.groups)
self.pos = (20, 20)
self.image = Player.image
self.rect = self.image.get_rect()
self.movepos = [0,0]
self.area = screen.get_rect()
self.still = True
def update(self):
newpos = self.rect.move(self.movepos)
if self.area.contains(newpos):
self.rect = newpos
pygame.event.pump()
def move(self, x, y):
self.still = 0
if self.still == 0:
self.movepos[0] = self.movepos[0] - x
self.movepos[1] = self.movepos[1] - y
else:
pass
def still(self):
self.still = 1
frispri = pygame.sprite.Group()
Player.groups = frispri
p = Player()
def rungame():
while True:
drawScreen()
drawEntitys()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
elif event.type == KEYDOWN:
if event.key == K_UP:
p.move(0,1)
elif event.key == K_DOWN:
p.move(0,-1)
elif event.key == K_LEFT:
p.move(1,0)
elif event.key == K_RIGHT:
p.move(-1,0)
elif event.type == KEYUP:
if event.key == K_UP:
p.still()
elif event.key == K_DOWN:
p.still()
elif event.key == K_LEFT:
p.still()
elif event.key == K_RIGHT:
p.still()
flipgame()
def flipgame():
pygame.display.flip()
rungame()
答案 0 :(得分:2)
Player.still
是一个布尔值,在此处指定:
class Player(pygame.sprite.Sprite):
def __init__(self):
# ...
self.still = True
你不能调用一个布尔值,因为它不是一个函数,你在这里尝试:
p = Player()
# ...
p.still()
答案 1 :(得分:1)
这与本question
中讨论的问题基本相同您的问题是您有一个实例变量still
,其名称与您的方法相同。当你执行p.still()时,Python会将p.still解释为尝试访问变量而不是方法,然后尝试“调用”该变量。
解决方案是重命名方法或变量。要使代码工作,您只需要更改其中一个。但良好的编程习惯可能会说你应该改变它们。
由于变量是一个标志,指示玩家是否仍然存在,您可以将其名称更改为is_still
。这是一个稍微具有描述性的名称,可以清楚地表明变量的含义。
对于该方法,您可以将其重命名为set_still
或mark_still
,以表明它正在更改播放器的状态。或者结合上面对变量名称的更改,您可以创建方法名称set_is_still
,以清楚地说明您正在设置的变量。