この前ゲームループを作ってみましたし、キーボードの入力も取得できるようになりました。
ここまで来れば、「キーが押されている間、プレイヤーを移動させる」処理が書けますね。ゲームの基本です。
update を定期的に呼んでもらう処理と、キー入力を受け付ける処理を組み合わせたらいいですね。これだと実は、斜めに移動するときには移動速度が速い…という問題があるのですけれど。それは真面目に対応するときに直しましょう。
「プレイヤー」と言いつつ、”<->” とテキストで書いた文字が動くだけです。画面の端の判定もしていないのではみ出しますし。第一歩としてはこれで良いでしょう。
import pyglet
from pyglet.window import key
from collections import defaultdict
window = pyglet.window.Window()
label = pyglet.text.Label('<->',
font_name='Courier New',
font_size=12,
x=window.width//2, y=window.height//2,
anchor_x='center', anchor_y='center')
@window.event
def on_draw():
window.clear()
label.draw()
key_status = defaultdict(bool)
@window.event
def on_draw():
window.clear()
label.draw()
@window.event
def on_key_press(symbol, modifiers):
key_status[symbol] = True
@window.event
def on_key_release(symbol, modifiers):
key_status[symbol] = False
# 1 秒あたり 320 ピクセル移動する
MOVE_SPEED = 320
def update(dt):
# 左右の移動
if key_status[key.A]:
label.x -= dt * MOVE_SPEED
elif key_status[key.D]:
label.x += dt * MOVE_SPEED
# 上下の移動
if key_status[key.W]:
label.y += dt * MOVE_SPEED
elif key_status[key.S]:
label.y -= dt * MOVE_SPEED
pyglet.clock.schedule_interval(update, 1 / 120.0)
pyglet.app.run()