11月8日 激突! - ON SPRITE GOSUB
というわけで、MSX1に触れてみよう企画第二弾です。
いつから連続企画になったんですか。
まあまあ。で、ゲームづくりに向いているMSXですが、スプライト関連の命令の中に便利そうなものを見つけました。
[ ON SPRITE GOSUB ] なんですかこれ?
スプライト同士が衝突した場合、サブルーチンに飛んでくれるという、衝突判定をパソコンがしてくれる非常に便利そうな命令です。
自前で衝突判定を書かなくていいんですね。確かに便利なような。
そこで、実験する為にプログラムを作ってみました。衝突すると"CRUSH!"と表示するものです。
十字スプライトを動かして、四角いスプライトに当てるんですね。
おお!
おおぉう!
何興奮してるんですか?普通にちゃんと判定してますが。
いや、実はON SPRITE GOSUBの判定って、スプライトサイズの矩形で判断するんじゃないかと予想してたから。画面の十字マークはスプライトサイズより若干小さめに作られていて、実際のスプライトサイズはこんな感じになっているので、
この状態でも「当たった」と判定されるんじゃないかと思ってた。
なるほど、ちゃんと透明部分には判定がないので、それでびっくりしてたんですね。
かなり使える!と思ったんですが……
が?
これって、どのスプライトが当たったかという情報が得られないみたいなんだよね。今回みたいに二つしか無ければいいんだけど、例えば自機・自弾・敵・敵弾なんていう複数スプライトがあったら、ON SPRITE GOSUBで飛ばされても何と何が当たったのかわからないので、結局判定コードを書かなきゃならないんじゃないかと思って。
なるほど。あと、判定が見た目より小さい時とかですね。弾幕シューティングの自機とか。
さすがにBASICで弾幕シューは無理だと思うけど、そういう場合も自前で判定しないといけないよね。
ということは、ON SPRITE GOSUB は使えない?
いや、さっきの実験でもわかったとおり、透明部分についてもちゃんと考慮してくれるので、使いどころはありそう。複雑な形のスプライトだと特に。
あと、ゲームづくり初心者用という役割もありそうですよね。
自動で衝突判定してくれるから、考えるところが少なくて済むのでそうかもね。
コメントの投稿
No title
動かそうとするスプライト番号を控えておけば解りそうですが、1命令分遅くなるのがネック。
No title
結局いろいろ自前でやらなきゃならないので、何番と何番が当たったのかの情報が欲しいですよね。