【问题标题】:Update an individual sprite in a game loop在游戏循环中更新单个精灵
【发布时间】:2016-09-05 10:22:27
【问题描述】:

我试图在游戏循环中只移动一个精灵,包括两个精灵。我在Bit.update() 方法中包含了spr1,所以如果按下w spr1.y -= 60。换句话说,精灵被分配给self,希望当w被按下时只有spr1会被移动。但是,在当前代码中,按下 w 会同时移动 spr1spr2。如何在更新方法中只引用和更新spr1

class Bit(games.Sprite):
    def update(self):
        if games.keyboard.is_pressed(games.K_w):
            self = spr1
            self.y -= 60

def main():
    spr1_image = games.load_image("spr1.png")
    spr1 = Bit(image = spr1_image,
                x = games.screen.width / 10,
                y = games.screen.height / 10)

    spr2_image = games.load_image("spr2.png")
    spr2 = Bit(image = spr2_image,
                x = games.screen.width * 9 / 10,
                y = games.screen.height * 9 / 10)

    games.screen.add(spr1)
    games.screen.add(spr2)

    games.screen.mainloop()

main()

【问题讨论】:

  • 不清楚您要做什么。无论如何,每个实例都只引用自己;调用self.y 仅作用于调用update 的实例。
  • 当我按下 w 它移动两个精灵。我正在尝试编写程序,以便按 w 单独移动 spr1。

标签: python class oop livewires


【解决方案1】:

已编辑 这两个精灵具有不同的行为,因此您需要为它们设置不同的类。

  1. Bit 中,取出self=spr1 行,应该没问题。在update() 中,self 是当前精灵是什么——spr1spr2
  2. main 中,将spr2 更改为

    spr2 = games.Sprite(image = spr2_image,    # <---- changed class
            x = games.screen.width * 9 / 10,
            y = games.screen.height * 9 / 10)
    

    由于spr2 不需要响应键盘,它不需要games.Sprite 尚未提供的任何行为。因此,您无需为此使用Bit

(警告:我没有使用过火线,所以我可能遗漏了一些明显的东西 :))

【讨论】:

  • 我明白你的所作所为。为了清楚起见,我的代码已被简化。实际程序中有数十个精灵,我希望避免为每个精灵编写一个类。我想要某种方式(比如 self=spr1)来移动单个精灵。
  • 是否有更好的方法取决于您如何构建代码。与其完全改变这个问题,不如添加一个单独的问题,链接到这个问题,并提供有关您的多精灵用例的更多详细信息?请包括您如何决定要移动哪个精灵。例如,您是否认为单个精灵在任何给定时间都是“活动精灵”?谢谢!
猜你喜欢
  • 2011-12-12
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多