繁体   English   中英

这段代码中的“ TypeError:'int'对象不可调用”错误

[英]“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_stillmark_still以指示它正在更改播放器的状态。 或结合以上对变量名的更改,您可以将方法名设置为set_is_still ,以清楚地说明要设置的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM