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 開発メモ 第6回 チュートリアルを読んでいく オブジェクト

Last updated at Posted at 2024-12-30

Objects

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

いよいよスプライト(オブジェクト)です。スプライトといえば、MSXのときBASICで動かした覚えがあります。確か、単色で8ドットと16ドットがあるんでしたっけ。なつかしい。

オブジェクトもタイルマップと同じタイルを使用し(\$8000-\$87FF, \$8800–\$8FFF)、OAMという領域に位置などの情報を格納すると表示される。

OAMのエリアはまず初期化(0でうめる)必要がある。

    ld a, 0
    ld b, 160
    ld hl, _OAMRAM
ClearOam:
    ld [hli], a
    dec b
    jp nz, ClearOam

おなじみのコードになってきました。4バイトが40個で160バイト分を0で埋めます。

OAMは上位から4バイトでY座標, X座標, タイルのID, 属性 の順で格納する。

    ld hl, _OAMRAM
    ld a, 128 + 16 
    ld [hli], a
    ld a, 16 + 8
    ld [hli], a
    ld a, 0
    ld [hli], a
    ld [hli], a

Y座標は16ピクセル、X座標は8ピクセル、足して格納する。画面から消したい場合は、Y座標を0とかにするらしい。

rLCDCに表示フラグをたて、背景とオブジェクトのパレットを指定する。

    ; During the first (blank) frame, initialize display registers
    ld a, %11100100
    ld [rBGP], a
    ld a, %11100100
    ld [rOBP0], a

表示できました!

スクリーンショット 2024-12-31 8.28.37.png

赤く囲っている部分がオブジェクトです。試しに座標を変更してみると位置がかわったことを確認できます。もし、アニメーションみたいな動きを付ける場合は、タイルの方を変えるんでしょうか。複数タイルを用意しておいて、IDを変えるのかな。

Sublime Text でビルドできるように、Makefileをつくりました。

all:	build

build:
	@rgbasm -o main.o main.asm
	@rgblink -o main.gb main.o
	@rgbfix -v -p 0xFF main.gb

次回

次回ではいよいよ動かします!

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?