如何在按下键的时候移动字符。

时间:2017-07-25 10:47:30

标签: python sprite

我一直在写一本名为python for kids的书。书中的最后一个项目是关于平台游戏。该游戏名为Stick Man Races for the Exit。你移动角色的方式(一个火柴人)是你向左或向右按​​,他会向左或向右移动。但与大多数游戏不同的是,如果放开钥匙,他就会继续前进。你怎么做到这样他会在钥匙被释放时停下来?

以下是代码下载的链接:https://www.nostarch.com/pythonforkids

如果按下书中的下载示例代码,程序将在第18章文件夹中显示为“stickmangame7”。我已经包含了这个链接,以防我在代码中嵌入了错误的位。

这是一些嵌入式代码,可能是正确的位:

class StickFigureSprite(Sprite):
def __init__(self, game):
    Sprite.__init__(self, game)
    self.images_left = [
        PhotoImage(file="stick-L1.gif"),
        PhotoImage(file="stick-L2.gif"),
        PhotoImage(file="stick-L3.gif")
    ]
    self.images_right = [
        PhotoImage(file="stick-R1.gif"),
        PhotoImage(file="stick-R2.gif"),
        PhotoImage(file="stick-R3.gif")
    ]
    self.image = game.canvas.create_image(200, 470, image=self.images_left[0], anchor='nw')
    self.x = -2
    self.y = 0
    self.current_image = 0
    self.current_image_add = 1
    self.jump_count = 0
    self.last_time = time.time()
    self.coordinates = Coords()
    game.canvas.bind_all('<KeyPress-Left>', self.turn_left)
    game.canvas.bind_all('<KeyPress-Right>', self.turn_right)
    game.canvas.bind_all('<space>', self.jump)

另外:

 def turn_left(self, evt):
    if self.y == 0:
        self.x = -2

def turn_right(self, evt):
    if self.y == 0:
        self.x = 2

P.S。我知道你可以使用pygame来做到这一点,但是其余部分并没有使用pygame,所以我认为这不会起作用。

1 个答案:

答案 0 :(得分:0)

在没有查看其余代码的情况下,假设turn_left()turn_right()方法正在修改self.x,我会假设在某些事件循环中,此值用于计算移动你在x轴上的“棒”。您可能希望在释放密钥时将其重置为0,因此请创建其他方法,例如:

def stop_movement(self, evt):
    self.x = 0

绑定KeyPress事件时,还会将KeyRelease事件绑定到该方法,例如:

game.canvas.bind_all('<KeyRelease-Left>', self.stop_movement)
game.canvas.bind_all('<KeyRelease-Right>', self.stop_movement)