buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

pyxel ゲーム画面遷移+動きをつける

前回はpyxelでゲーム画面表示+キャラの移動までできた pyxelであつ森を知ったかぶりする

ソースコードはこちら

家に着いたらローディング画面を表示

キャラが家に着いたらこのローディング画面に遷移させたい

f:id:butorisa:20201020173318p:plain

こちらの記事をお手本にしました たぶんどんな環境でも使えるであろう、ゲーム画面遷移の作り方になります~

class GameMode(Enum):
    """ 画面一覧 """
    # 町
    Town = auto()
    # 家の中
    Home = auto()

画面遷移を制御するEnumを定義

def switch_active(self, obj, target):
    """ オブジェクトが重なったら一方を非表示にする """
    if abs(obj.position[0] - target.position[0]) < 10\
            and abs(obj.position[1] - target.position[1]) < 10:
        obj.active = False
        # ロード画面
        self.game_mode = GameMode.Home
    else:
        obj.active = True
        # ゲーム画面
        self.game_mode = GameMode.Town

元々作っていたキャラが家に着いたらキャラを非表示にする処理 → ゲームモードのEnumを切り替える

def draw(self):
    """ 画面描画 """
    if self.game_mode == GameMode.Town:
        self.draw_town()
    elif self.game_mode == GameMode.Home:
        self.draw_loading()
        # self.draw_home()

def draw_town(self):
    """ 町を描画 """
    # 背景
    pyxel.cls(7)
    pyxel.bltm(0, 0, 0, 0, 0, 16, 16)
    # 家
    pyxel.blt(self.home.position[0], self.home.position[1], 0, 16, 0, 16, 16, 5)
    # うさぎ
    pyxel.blt(40, 80, 0, 48, 0, 16, 16, 5)
    # プレイヤー
    if self.player.active:
        pyxel.blt(self.player.position[0], self.player.position[1], 0, 0, 0, 16, 16, 5)

def draw_home(self):
    """ 家の中を描画 """
    pass

def draw_loading(self):
    """ ロード画面を描画 """
    pyxel.cls(7)
    pyxel.bltm(0, 0, 0, 16, 0, 16, 16)

ゲームモードによって描画する画面を制御

家に着いたらうさぎが表示されるようになった!! レイアウト変更した^^

f:id:butorisa:20201020173340g:plain

ローディング画面のうさちゃんをジャンプさせる

こちらの記事をお手本にしました Python:pyxelで作ったレトロ風タイトル画面

まずうさちゃんジャンプ画像を用意

f:id:butorisa:20201020173403p:plain

def draw_loading(self):
    """ ロード画面を描画 """
    # ウサギがジャンプする画像を表示
    if self.flip:
        tm_x = 32
        tm_y = 0
    else:
        tm_x = 16
        tm_y = 0

    pyxel.cls(7)
    pyxel.bltm(0, 0, 0, tm_x, tm_y, 16, 16)

    if pyxel.frame_count % 15 == 0:
        self.flip = not self.flip

ゲームフレームが15の倍数の時に通常⇔ジャンプ画像を切り替える タイルマップも座標を指定して表示できる ※ self.flip__init__()関数で初期化しています

ローディング画面でうさちゃんがジャンプ!

f:id:butorisa:20201020173419g:plain