2015年5月28日木曜日

1chipMSX改でブロック崩しを作る その後 スプライト、割り込み判定、マージ、パターンデータなどが多すぎる!?

 前回はブロックく崩しを作ってみました。今回はMSXでボールの8ドットスプライトにします。
MSXBASICでSCREEN1を実行することでスプライトモードに入ることができます。

900 DATA 00000000 を入力してリターンします。ゼロ8回です。
次に900のところを910リターン、920リターンと970まで繰り返します。
リストがこんなふうになります。ここからゼロを1に書き直します。


900 DATA 00000000
910 DATA 00000000
920 DATA 00000000
930 DATA 00000000
940 DATA 00000000
950 DATA 00000000
960 DATA 00000000
970 DATA 00000000

これでスプライトパターンデータができました。
20行はDATAをA$に読み込みます。READA$
この1つのデータの00000000をバイナリの文字列にします。"&B"+A$
次に文字列を数値にします。VAL("&B"+A$)
さらにアスキーコードの文字として定義します。CHR$(VAL("&B"+A$))
前のデータに加えます。C$=C$+ CHR$(VAL("&B"+A$))
これをFORで囲ってI=0から7の8回繰り返して、
最後に文字列をスプライト化します。SPRITE$(1)=C$






30行でスプライトの表示番号、座標、色、パターン番号を書きます。
こんなふうに右の方にバブルボール?ができました!

 今回は移動処理を4ドットステップにすると、点のままでは…というふうに
滑らかになりませんがスプライトは半キャラ先になるので、
ボールの動きが遅くてもまだスムーズに見えると思います。
バブル風に試してみたのですが、やはり大きいので、

01110
11111
11111
11111
01110

にしました。5ドットのボールですね。
あとはバーもスプライトにします。あとはドット判定をスプライト判定に変えるかなぁ。

2015/06/11追記





こんなふうにできました。実行するとボールとバーがスプライトになりました。
スプライトの当たり判定はONSPRITEGOSUB~の割り込み命令で行います。
スプライトの割り込みを許可するにはSPRITEON、禁止する場合はSPRITEOFFと
します。これを指定していないと誤動作する場合があります。

ただ、どういうわけか先に反応してしまうことがあるので、
610行にVY>180を加えています。



LINE命令でバーを動かすとカクカクしていましたが滑らかになりました。

このプログラムは100行から始まるのですが、スプライトは10行から書いています。
今のところ仮のプログラムになっています。DATA分はソースの後ろに書くのが
通例ですが、今のところは仮のプログラムの後ろになっています。
これをメインプログラムの後ろに移動します。

例えば240から440行までDATAの場合は一旦別名でSAVE"B.BAS"というふうに
保存します。次にメインの最後が2890行なら2900行にリナンバーします。

RENUM 2890

次にアスキーセーブで保存し直します。

SAVE"B.BAS",A

一旦消して再びメインへ戻します。

LOAD"BLK2015B.BAS"

次にさっきのプログラムマージさせます。

MERGE"B.BAS"

これでメインプログラムの最後にDATA分が加わりました。

 ---

 1chipMSXはまたホビー用にして、Windowsを仕事用に戻したいと思います。
 やっぱり、ホビーと仕事が混在しているとデスクトップがスッキリなりませんねw。
どうしてもWindowsにデータを変えたい場合はSC5をBMPにするMSXのフリーウェアを
使うようにして、そうですね~使う時はブログに書きたいと思います。



0 件のコメント:

コメントを投稿