pyglet でプレイヤーを移動

この前ゲームループを作ってみましたし、キーボードの入力も取得できるようになりました。

ここまで来れば、「キーが押されている間、プレイヤーを移動させる」処理が書けますね。ゲームの基本です。

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()
タイトルとURLをコピーしました