トピック
ヤッピー yappy0305

BGに当たり判定をつけるには、どうすれば出来ますか?

0そうだね
プレイ済み
返信[1]
親投稿
Godot orz_127
自分は、そういう処理を作っていないのでわかりませんが、何回か同じ質問を見かけた気がします。 もしかしたら、トピックではなく、プレイ日記だったかも。 過去の投稿を探すと、よい回答が見つかるかも知れません。
1そうだね
プレイ済み
返信[2]
親投稿
ΖΕΧ ZEX256
BASIC自体には壁という概念が無いので、 壁をすり抜けない方法は、貴方の作るプログラムによって、 貴方が壁と考えるBGキャラの位置に、 自キャラが入り込まないように 自キャラの移動を制限することで実現できます。 で、指定座標にあるBGのキャラクタ番号を調べるのがBGGETです。
1そうだね
プレイ済み
返信[3]
親投稿
ΖΕΧ ZEX256
では、どう制御すれば壁に入り込まないようにできるのか少々説明します、 キャラクタをボタン動作で移動させる場合、次の手順を踏みます。 ボタン入力→自キャラの座標を移動計算→自キャラの座標に自キャラ表示 この「自キャラの座標を移動計算」の前に、 ボタンを押した先の座標にあるBGキャラクタ番号を調べ、 その番号が、貴方の考える壁の番号だったら、自キャラの座標を進めない。 とすることで壁に入らないようにできます。
0そうだね
プレイ済み
返信[4]
親投稿
残念乍、BGには、スプライトのSPCOLステートメントやSPHITSP関数の様な便利な機能は有りません。BGの特定の位置(四角形、RECTANGLE)とスプライトの衝突判定ならSPHITRC関数が、特定の位置(座標、POSITION)のBGキャラクタを取得するならBGGET関数が一般的に使用されて居ます。
0そうだね
プレイ済み
返信[5]
親投稿
ΖΕΧ ZEX256
BGGETのX,Y座標には調べたいBGキャラの座標を指定するのですが、 BGGETは、2種類の座標系が指定できます。 座標系フラグ(省略時0) 0: X,Y座標をBGスクリーン座標(キャラ単位)とする 1: X,Y座標を画面座標(ドット単位)とする 自キャラをスプライトで作っているなら座標はドット単位なので 1: X,Y座標を画面座標(ドット単位)なら、ほぼそのまま使えるのですが、 0: X,Y座標をBGスクリーン座標(キャラ単位)を使うなら、X,Y座標を16で割った値にする必要があります。
0そうだね
プレイ済み
返信[6]
親投稿
ΖΕΧ ZEX256
サンプル MAZE_EXP.BAS【KDVEVNNE】 座標系はBGスクリーン単位、移動はアニメさせている。 Wが壁、Sがスピード
0そうだね
プレイ済み
返信[7]
親投稿
ΖΕΧ ZEX256
実行した画面です。 十字ボタンで移動し、押した方向に壁があると移動しない。
0そうだね
プレイ済み
返信[8]
親投稿
ΖΕΧ ZEX256
ドット単位で移動する場合は、1点で判定できません、キャラクターの幅と高さを考慮しなければならないからです。 BGのスクロールとかするならBGCOORDを使って座標変換すると良いかもしれません。 BGCOORDは、BGレイヤーの、画面上の座標(ドット)とBGレイヤー上の座標(ドット・キャラ単位)を相互変換できます。
0そうだね
プレイ済み
返信[9]
親投稿
ΖΕΧ ZEX256
他にもこの辺参考になるかも知れません。 でんぺんさんの解説 テキストとの当たり判定のサンプル https://miiverse.nintendo.net/posts/AYIHAAAEAAA5VHwbWOr-xQ 解説つきサンプル講座 キャラクターの移動やジャンプ https://miiverse.nintendo.net/posts/AYIHAAAEAADaVHhje1QgdA 第二回解説つきサンプル講座 サイドビューのジャンプとBGとの判定 https://miiverse.nintendo.net/posts/AYIHAAAEAAA5VHwZFPOzCA
0そうだね
プレイ済み