![](/img/trans.png)
[英]Python code not working: TypeError,'int' object is not callable
[英]“TypeError: 'int' object is not callable” error from this code
以下代码给了我这个错误,我很困惑。 抱歉,如果我问的问题有误,我是新来的,但我认为这与准则相符。 释放键后,图像将在整个背景中移动,这会给我这个错误并崩溃。
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()
Player.still
是一个布尔值,在此处分配:
class Player(pygame.sprite.Sprite):
def __init__(self):
# ...
self.still = True
您不能在布尔中调用它,因为它不是函数,因此您可以在此处进行尝试:
p = Player()
# ...
p.still()
这主要是因为在此讨论的相同问题的问题
您的问题是您还有一个实例变量still
,其名称与您的方法相同。 当您执行p.still()时,Python会将p.still解释为尝试访问变量而不是方法,然后尝试“调用”该变量。
解决方案是重命名方法或变量。 要使代码正常工作,您只需要更改两者之一即可。 但是良好的编程习惯可能会说您应该同时更改两者。
由于该变量是一个指示玩家是否静止的标志,因此您可以将其名称更改为is_still
。 这是一个更具描述性的名称,它使变量的含义更加清楚。
对于该方法,您可以将其重命名为set_still
或mark_still
以指示它正在更改播放器的状态。 或结合以上对变量名的更改,您可以将方法名设置为set_is_still
,以清楚地说明要设置的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.