2017-07-25 48 views
0

我一直在努力通過一本名爲python的書爲孩子們。本書的最後一個項目是關於平臺遊戲。這場比賽被稱爲棒人先生的出口。你移動角色(一個火柴人)的方式是按左或右,他會左右移動。但是與大多數遊戲不同,如果你放棄了這個關鍵,他就會繼續前進。你如何做到這一點,所以當鑰匙被釋放後他會停下來?如何僅在按下鍵時移動字符Python。

這是一個下載代碼的鏈接:https://www.nostarch.com/pythonforkids

如果你從書上按下載示例代碼,程序是「stickmangame7」中的第18章的文件夾。如果我在代碼中嵌入了錯誤的位,我已經包含了這個鏈接。

下面是一些嵌入的代碼,其可以是正確的比特:

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) 
+0

非常感謝。這工作完美。 –

相關問題