2017-07-25 11 views
0

私は子供のためのpythonという本を通して働いています。本書の最後のプロジェクトはプラットフォームゲームに関するものです。このゲームは、出口のためにスティックマンレースと呼ばれています。キャラクターを動かす方法(スティックマン)は、左または右を押すことです。左または右に移動します。しかし、ほとんどのゲームとは違って、あなたが鍵を離れると、彼は動き続けます。キーが離されたときに彼はどのようにして停止するのですか?ここでキーがPythonで押されたときにだけ文字を移動する方法。

は、コードのダウンロードへのリンクです: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を使用していないので、それはうまくいくとは思いません。 turn_left()turn_right()方法はself.xを変更していることを私はいくつかのイベントループにこの値がx軸上のあなたの「スティック」の動きを計算するのに使用されることを前提としています与えられたコードの残りの部分を見ずに

+0

編集していただきありがとうございます。私はフォーマットがうまくいかないです。申し訳ありません。 –

答えて

0

、。例えば、

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

そして、あなたのKeyPressイベントをバインドするとき、その方法にもKeyReleaseイベントをバインド:あなたはおそらく、キーがリリースされるとき0にそれをリセットするので、例えば、追加のメソッドを作成

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

ありがとうございます。それは完璧に働いた。 –

関連する問題