【问题标题】:Pygame problem using list from list to create instancePygame问题使用列表中的列表创建实例
【发布时间】:2020-10-07 15:38:18
【问题描述】:

所以我正在尝试射击子弹。这个想法是创建一个列表,其中包含创建项目符号实例所需的变量并将该列表添加到列表中。然后我从包含列表的列表中的最后一项创建一个项目符号实例。可悲的是,我在尝试创建新项目符号实例的行中得到了“TypeError:'tuple' object is not callable”。我希望你能帮助我,变量名应该是自我解释的。

def shoot(self):
        if self.bullets_isshot == True:
            self.m_x, self.m_y = pygame.mouse.get_pos()
            self.bullets_new_bullet = (self.m_x, self.m_y, self.cords_x, self.cords_y)
            self.bullets_list.append(self.bullets_new_bullet)
            for bullet in self.bullets_list:
                if bullet == self.bullets_list[-1]:
                    new_bullet = bullet(bullet[0], bullet[1], bullet[2], bullet[3])
            self.bullets_isshot = False 

如果你需要它,子弹 init 方法:

def __init__(self, target_x, target_y, player_x, player_y):
        #var img, cords
        self.img = fast_load_img('/data/img/bullets/fireball.png')
        self.width = 128
        self.height = self.width
        self.x = player_x
        self.y = player_y
        self.target_x = target_x
        self.target_y = target_y
        self.d_x = self.target_x - self.x
        self.d_y = self.target_y - self.y

        #var vel, angle
        self.vel = 5
        self.angle = math.atan2(self.d_x, self.d_y)
        self.x_change = self.vel * math.cos(self.angle)
        self.y_change = self.vel * math.sin(self.angle)

【问题讨论】:

  • 查看您的数据类型。您有一个 listtuple,但您正在尝试调用/调用无效操作的元组。你实际上并没有实例化这个类
  • @MaximilianBurszley 我刚刚意识到它并将元组更改为列表,但没有任何区别,只是它说“列表”对象现在不可调用

标签: python list class pygame


【解决方案1】:

看起来您正在创建单个项目的列表,然后对其进行迭代。这是不必要的。

您根本不需要列表或元组。只需使用类构造函数创建一个新项目符号。您似乎没有将新子弹存储在任何地方,所以我刚刚从函数中返回了它。可能您应该将它存储在一个列表或类似的列表中(假设一次在屏幕上显示多个项目符号)。

def shoot( self ):
    """ If the player has fired a shot, create a new bullet.
        Returns the new bullet or None """
    new_bullet = None
    if self.bullets_isshot == True:
        self.m_x, self.m_y = pygame.mouse.get_pos()
        new_bullet = bullet( self.m_x, self.m_y, self.cords_x, self.cords_y )
        self.bullets_isshot = False 
    return new_bullet    

【讨论】:

    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2017-05-31
    • 2013-12-02
    • 2019-12-25
    相关资源
    最近更新 更多