GameMakerで画面端で反射する処理

GameMakerを使用して、
画面の端で反射させたい時に、
speedを利用している時は、
以下のように使う事があります。

if( x < sprite_xoffset )if( hspeed < 0 ){hspeed = -hspeed;}
if( x > room_width-sprite_xoffset )if( hspeed > 0 ){hspeed = -hspeed;}
if( y < sprite_yoffset )if( vspeed < 0 ){vspeed = -vspeed;}
if( y > room_height-sprite_yoffset )if( vspeed > 0 ){vspeed = -vspeed;}

画面の左側に、スプライトの表示がはみ出たら?
水平の速度はマイナス?
それなら、水平速度だけ逆にしようね。
みたいなのを、上下左右でしています。

ブロック崩しなゲームや、画面内で反射させたい時は、
こうすると、速度が速くて、スプライトを飛び抜けて、
知らない場所をずっと移動し続ける。
みたいなのを防げます。


ちょっと思い出したのですが、
ナムコさんのドラゴンスピリットで、
ステージ9か8で、
石の中はレバーを真下に入れっぱなしにしておくと、
ミスにならないですり抜けられるっていうバグがありますが、

スクロールで押されて下にずれる
レバーを下に入力しているので、画面外判定で戻される。
それから当たり判定チェックが行われる。
という順番の処理だから、すり抜け可能だったのかな?
っと思ったりしました。

この記事が気に入ったらサポートをしてみませんか?