ロボ団群馬のブログ

Pyxelでキャラクターを動かそう!初心者向けステップ解説

Pyxelでキャラクターを動かそう!初心者向けステップ解説

Pythonでレトロゲームを作る人気ライブラリPyxel(ピクセル)
今回は、「Pyxelでキャラを動かす方法」を初心者向けにやさしく解説します。
検索でも「pyxel キャラ 動かす」「pyxel キー入力」「pyxel move character」などが急増中。
この記事を読めば、あなたのキャラが矢印キーで動くようになります!


Pyxelでキャラを動かすために必要な基本

キャラクターを動かすには、主に次の3ステップで進めます。

  1. キャラクターの位置を変数で管理する
  2. キー入力を検出する
  3. 位置を更新して描画する

Pyxelは毎フレーム「update → draw」を繰り返すゲームループ構造になっているため、
update関数で動きを処理し、draw関数で画面に表示します。


キャラを動かす最小サンプルコード


import pyxel

class App:
    def __init__(self):
        pyxel.init(160, 120, title="Move Character")
        self.x = 70  # キャラのX座標
        self.y = 50  # キャラのY座標
        pyxel.run(self.update, self.draw)

    def update(self):
        # キー入力の確認
        if pyxel.btn(pyxel.KEY_RIGHT):
            self.x += 2
        if pyxel.btn(pyxel.KEY_LEFT):
            self.x -= 2
        if pyxel.btn(pyxel.KEY_DOWN):
            self.y += 2
        if pyxel.btn(pyxel.KEY_UP):
            self.y -= 2

    def draw(self):
        pyxel.cls(0)  # 背景を黒でクリア
        pyxel.rect(self.x, self.y, 8, 8, 11)  # キャラ(青い四角)

App()

このコードを実行すると、矢印キーで青い四角形が動きます。
これがPyxelでのキャラクター制御の基本形です!


コードのポイント解説

  • pyxel.btn():キーが押されている間Trueを返す関数
  • pyxel.KEY_UP / KEY_DOWN / KEY_LEFT / KEY_RIGHT:方向キーの定数
  • pyxel.rect(x, y, w, h, color):四角を描く

動きを滑らかにしたい場合は、1フレームで移動する距離(ここでは2)を変更します。


画像を使ってキャラを動かす

四角ではなく、Pyxel Editorで作ったキャラクター画像を動かすこともできます。

1. Pyxel Editorでキャラを作る

まず、Pyxel Editorで16×16ピクセルのキャラクターを描き、game.pyxresに保存します。
(エディタの開き方:pyxel edit game.pyxres

2. キャラ画像を読み込むコード


import pyxel

class App:
    def __init__(self):
        pyxel.init(160, 120, title="Character Move with Image")
        pyxel.load("game.pyxres")  # キャラ画像を読み込み
        self.x = 70
        self.y = 50
        pyxel.run(self.update, self.draw)

    def update(self):
        if pyxel.btn(pyxel.KEY_RIGHT):
            self.x += 2
        if pyxel.btn(pyxel.KEY_LEFT):
            self.x -= 2
        if pyxel.btn(pyxel.KEY_DOWN):
            self.y += 2
        if pyxel.btn(pyxel.KEY_UP):
            self.y -= 2

    def draw(self):
        pyxel.cls(0)
        # 画像バンク0の(0,0)から16x16を描画
        pyxel.blt(self.x, self.y, 0, 0, 0, 16, 16)

App()

これでPyxel Editorで作った自分のキャラが動きます!
移動速度を調整したい場合は、移動量(2の部分)を変更します。


滑らかに動かす・画面外に出ないようにする

ゲームらしくするために、キャラが画面外に出ないように制限を加えてみましょう。


def update(self):
    if pyxel.btn(pyxel.KEY_RIGHT) and self.x < 160 - 16:
        self.x += 2
    if pyxel.btn(pyxel.KEY_LEFT) and self.x > 0:
        self.x -= 2
    if pyxel.btn(pyxel.KEY_DOWN) and self.y < 120 - 16:
        self.y += 2
    if pyxel.btn(pyxel.KEY_UP) and self.y > 0:
        self.y -= 2

これでキャラが画面の端で止まるようになります。
ゲームの基礎「壁判定」の第一歩です。


スペースキーでジャンプする(応用)

次は少し応用として、スペースキーでジャンプを実装してみましょう。


import pyxel

class App:
    def __init__(self):
        pyxel.init(160, 120, title="Jump Example")
        self.x = 70
        self.y = 90
        self.vy = 0     # 縦の速度
        self.on_ground = True
        pyxel.run(self.update, self.draw)

    def update(self):
        # 左右移動
        if pyxel.btn(pyxel.KEY_RIGHT):
            self.x += 2
        if pyxel.btn(pyxel.KEY_LEFT):
            self.x -= 2

        # ジャンプ処理
        if pyxel.btnp(pyxel.KEY_SPACE) and self.on_ground:
            self.vy = -8
            self.on_ground = False

        self.y += self.vy
        self.vy += 0.5  # 重力

        # 地面に着地
        if self.y > 90:
            self.y = 90
            self.vy = 0
            self.on_ground = True

    def draw(self):
        pyxel.cls(0)
        pyxel.rect(self.x, self.y, 8, 8, 11)

App()

これでスペースキーを押すとキャラがジャンプします。
Pyxelではこのように変数(速度など)をうまく使って動きを制御します。


よくある質問(FAQ)

  • Q:キャラが動かない!
    A:pyxel.btn()は押している間動作します。押した瞬間だけ動かしたい場合はpyxel.btnp()を使いましょう。
  • Q:動きが速すぎる/遅すぎる
    A:移動量(例:self.x += 2)を調整してください。
  • Q:画像が表示されない
    A:pyxel.load()で読み込むファイルパスが正しいか確認。PNGではなく.pyxresファイルを指定します。

まとめ:Pyxelでキャラを動かすのはゲームづくりの第一歩!

Pyxelでキャラクターを動かせるようになると、
「アイテムを取る」「敵を避ける」「ステージをクリアする」など、どんどん世界が広がります。
次のステップは、衝突判定スプライトアニメーションに挑戦してみましょう。

👇 今回のまとめ

  • キー入力:pyxel.btn()
  • 描画:pyxel.rect()pyxel.blt()
  • 画面外制御:座標の上限・下限チェック
  • ジャンプ:速度(vy)と重力を使う

まずは動くキャラクターを作り、自分の手でゲームの第一歩を踏み出しましょう!

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

ページ上部へ戻る