BG面、スプライト面ではCHRSET命令でキャラクタ画像を書き換えると、
画面上に表示されている同じキャラクタ番号の画像も切り替わります。
毎フレーム(もしくは数フレーム)ごとにキャラクタ画像を書き換えることで、
擬似的にアニメーション処理をさせることができます。
これを利用し、上下左右にループするような単純なパターンを敷き詰め、
縦もしくは横に1ドットずつずらした画像に切り替えていくことで
スクロールしているように見せることができます。
キャラクタ毎にずらし方を変えることで多重スクロールのようにもできます。
ただし、あくまで擬似的なもの(それっぽく見せかけているだけ)なので、
別のキャラクタとの境界部は動かないという制限があります。(配置に工夫が必要です)
通常のスクロールや、BGSETによるキャラ番号の変更も同時に行えばより効果的(かもしれない)です。
・サンプル1
実行すると斜線が左にスクロールするように見えますが、
実際にはBGSETによるキャラの書き換え以外の処理はしていません。(BGOFS命令は使っていません)
CHRREAD命令でキャラクタ画像を文字列として取り出し、
01234567 89ABCDEF GHIJKLMN ... |
→ |
12345670 9ABCDEF8 HIJKLMNG ... |
|
のようにMID$を使って文字列を並び替え、CHRSETで再度登録してキャラクタを書き換えています。
SCRL=1の値を書き換えると変換速度が変わります。
ACLS:CLEAR
BGPAGE 0
CH1$="0B02040FB02040F002040F0B2040F0B0040F0B0240F0B0200F0B0204F0B02040"
CHRSET "BGU0",0,CH1$
@LOOP
CHRREAD("BGU0",0),CH1$
CH2$=""
SCRL=1
FOR I=0 TO 7
IF SCRL>0 THEN CH2$=CH2$+MID$(CH1$,I*8+SCRL,8-SCRL)+MID$(CH1$,I*8,SCRL)
IF SCRL<0 THEN CH2$=CH2$+MID$(CH1$,I*8+8+SCRL,-SCRL)+MID$(CH1$,I*8,8+SCRL)
NEXT I
CHRSET "BGU0",0,CH2$
VSYNC 1
GOTO @LOOP
|
QRコード
・サンプル2
複数のキャラクタを書き換え、またキャラごとに変化速度を変えています。
@CHR_SETであらかじめ配列に画像文字列を書き込んでおき、
メインループでは配列から直接読み込んで書き換えることで処理を軽くしています。
ソース(長いので別ページへ)
QRコード(PRGとSCRの2つに分かれています)