0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゲームボーイ RGBDS 開発メモ 第7回 チュートリアルを読んでいく オブジェクト(2)

Last updated at Posted at 2024-12-31

前回からひきつづき

https://gbdev.io/gb-asm-tutorial/part2/objects.html

を読みすすめていきます。

オブジェクトを動かしてみる

Main:
    ; Wait until it's *not* VBlank
    ld a, [rLY]
    cp 144
    jp nc, Main
WaitVBlank2:
    ld a, [rLY]
    cp 144
    jp c, WaitVBlank2

    ; Move the paddle one pixel to the right.
    ld a, [_OAMRAM + 1]
    inc a
    ld [_OAMRAM + 1], a
    jp Main

今までなにもしない無限ループだった部分を移動させるループに変更です。

Mainループで VBlankでなくなるまで待って、WaitVBlank2 でVBlankになるまで待ちます。
こうすることにより、次のVBlankまで待つことになり、表示されるのかな。

あとは X座標をインクリメントすると・・・

a.gif

動きました!なるほど255になったあと、0に戻るので、左端からまたでてきます(笑)
1/60秒に一回インクリメントされるので、1秒間に60ピクセル動きます。

これを遅くするには毎回ではなくて15フレームに一回など制限させます。

SECTION "Counter", WRAM0
wFrameCounter: db

WRAM0は読み書きできる領域で、グローバル変数として利用できる感じでしょうか。

    ld a, 0
    ld [wFrameCounter], a

0で初期化しまして、

Main:
    ld a, [rLY]
    cp 144
    jp nc, Main
WaitVBlank2:
    ld a, [rLY]
    cp 144
    jp c, WaitVBlank2

    ld a, [wFrameCounter]
    inc a
    ld [wFrameCounter], a
    cp a, 15 ; Every 15 frames (a quarter of a second), run the following code
    jp nz, Main

    ; Reset the frame counter back to 0
    ld a, 0
    ld [wFrameCounter], a

    ; Move the paddle one pixel to the right.
    ld a, [_OAMRAM + 1]
    inc a
    ld [_OAMRAM + 1], a
    jp Main

aが15になるまでMainループに戻り、15になったら、0に戻して X座標をインクリメントします。

これで遅くすることができました。cp a, 15cp 15 でも動きました。

余談

Qiita って動画貼れないんですね・・・。しょうがなくアニメgifに変換しました。

次回

次回はFunction(サブルーチン)です!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?