我一直在写一本名为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,所以我认为这不会起作用。
答案 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)