2017-12-06 9 views
0

私はカメを使用してPythonゲームに取り組んでいます。Pythonカメ移動プ​​ラットフォーム

私は、キーを押すと上下(ジャンプ)するプレーヤーオブジェクトを持っています。私は、プレイヤーがジャンプしなければならない動くプラットフォームを追加しようとしています。

移動プラットフォームをwhileループに入れてみました。問題は、whileループがプラットフォームを移動させ続けるために実行されているため、プログラムはキー押下を検出しません。

メインwhileループ内でturtle.listen()を移動しようとしましたが、動作しませんでした。

while Trueループ内でプラットフォームを移動し続け、リスナーをアクティブにするにはどうすればよいですか?

# moving platform 
while True: 
    s13.backward(3) 
    if s13.xcor() > 250: 
     s13.setheading(0) 
    if s13.xcor() < -200: 
     s13.setheading(180) 

... 
turtle.listen() 
turtle.onkey(jump, "Up") 

何かアドバイスが高く評価され...

+0

コードは私が投稿したときにフォーマットを保持しませんでした... turtle.listen()とonkeyはwhileループの外にあります – chappie

答えて

1

while True:文は亀のようなイベント駆動型の環境で場所がありません。利用可能なソリューションは少なくとも2つあります。最も直接的なのは、タートルの組み込みのontimer()イベントを使用して、固定(または可変)間隔で独立して機能するようにすることです。

もう1つの方法は、プログラムにスレッドを導入することです。しかし、タートルはtkinterベースなので、すべてのグラフィックス操作をメインスレッドを通して行う必要があります。これは事態を複雑にします。

from turtle import Turtle, Screen 

screen = Screen() 

s13 = Turtle('square') 
s13.color('red', 'blue') 
s13.shapesize(1, 3, 2) 
s13.penup() 

def jump(): 
    s13.color(*reversed(s13.color())) 

# moving platform 
def move_platform(): 
    s13.backward(3) 

    if s13.xcor() > 250: 
     s13.setheading(0) 
    if s13.xcor() < -200: 
     s13.setheading(180) 

    screen.ontimer(move_platform, 100) 

# ... 
screen.onkey(jump, "Up") 
screen.listen() 

move_platform() 

screen.mainloop() 

platf:

粗例を通し

  • Pythonのカメ

  • にOnTimer Pythonのカメ:

    ためStackOverflowのを検索してくださいormは前後に浮動します。上向きの矢印をクリックすると(ウィンドウをクリックしてアクティブにすると)、浮動小数点表示の塗りつぶしとアウトラインの色が入れ替わります。

+0

ありがとう...それは意味があります...スレッドの使用は私の心を横切ったそれらを使ったことはありません。私はその時間を私がどのように学ぶかと思います... mainでループを削除してontimerを追加しました。それは動作しますが、プレイヤーが「飛び降りている」間にs13は動かなくなります。 – chappie

+0

また、ontimer()を提案した他の記事も読んでいますが、解決方法も100%でした。スレッドは、2つの別々のobjの移動を互いに中断することなく作成する唯一の方法ですか?彼らは使いにくいですか? – chappie

+0

@chappie、私はコードを見たことがないので、プレイヤーがジャンプしている間にあなたのプラットフォームが動かなくなった理由を言うことはできません。たぶん 'ontimer()'はまだ選択肢です。 – cdlane

関連する問題