トピック
HMF gunsofthemy

BGの衝突判定

SPとBGがぶつかったことを判定させるにはどうすればいいんでしょうか。 ネットで調べるもどうやら計算で求めており、その上mk2版だったために質問しました。もうちょっといい方法はないのか・・・?
1そうだね
プレイ済み
返信[1]
親投稿
DieMatsmot DieMatsmot
つ[bgget] spの座標を渡せばあら不思議。
1そうだね
プレイ済み
返信[2]
親投稿
ねこはかせ hgskdj2609
IF~THEN と BGGETの組み合わせで可能です。 もし、自キャラの座標位置のBGが、特定のBG番号だったら 衝突処理に飛ぶ…という感じですね。
0そうだね
プレイ済み
返信[3]
親投稿
キルル2 kiruru2
プチコン3号ではBGGETという関数があります。 BG=BGGET(BGレイヤー、スプライトの位置、フラグ)として、 IF BG>=100&&BG<=200 THEN 衝突 ENDIF とすれば、BGとスプライトの当たり判定がとれます
0そうだね
プレイ済み
返信[4]
親投稿
HMF gunsofthemy
うーん。衝突判定はなんとかできましたがそっからがいかん。 というのも、今RPGっぽいやつを創ってるんですよ。それで壁に当たった場合、壁をすり抜けないようにしたいんだが出来ない・・・。てかアイデアはあるんですがなかなか上手くいきません。何か方法はありませんか?
0そうだね
プレイ済み
返信[5]
親投稿
ねこはかせ hgskdj2609
プログラム処理だけでなく、マップ構成も『すり抜けないマップデザイン』にしてはどうですか。
0そうだね
プレイ済み
返信[6]
親投稿
キルル2 kiruru2
普段はかべにぶつかっていない状態の場合 「移動したあとに壁にぶつかったら、移動する前は壁にぶつかっていなかった」と考えることができます つまり「動いた後に壁にぶつかったら、動く前の座標に戻る」というプログラムを組めば、大丈夫だと思います
0そうだね
プレイ済み
返信[7]
親投稿
DieMatsmot DieMatsmot
キルルさんの案に加えて、自分の進行方向の座標を予め調べておくという手段もあります。まぁ、めんどくさいですが。
0そうだね
プレイ済み
返信[8]
親投稿
ねこはかせ hgskdj2609
自キャラが16x16、中心座標が(8,8)の場合、中心座標から+8 または -8した座標に障害物があったら、自キャラの座標を変更させない。という感じで組んでみたらどうでしょう。ちなみに、中心座標から+10または-10 とか大きめに取ると、寸前で避ける挙動も可能です。
0そうだね
プレイ済み
返信[9]
親投稿
HMF gunsofthemy
【追記】 1. キャラの移動は背景となるBGを動かすことで行っています。 2. 一歩で8ドット進みます。 3. 現在、接触時入力方向制限タイプと、接触時座標修正タイプの2つを作成しています。(どちらも成功しておらず)
0そうだね
プレイ済み
返信[10]
親投稿
キルル2 kiruru2
だとしたら自分の8ドット先(動いた後の座標)を予め調べて、壁があったら背景をスクロールしない(移動しない)でいけると思います
0そうだね
プレイ済み
返信[11]
親投稿
DieMatsmot DieMatsmot
stickで進む方向をチェック その方向のBGをチェック どっちもOKなら進行 これでいいのではないかな
0そうだね
プレイ済み
返信[12]
親投稿
HMF gunsofthemy
予め調べてってそんなことできるんですか!? 今の技術では接触時に処理することしかできないので、 接触判定(true)→座標修正→表示 という流れです。てか全部このシステムです。 すいませんが、その「予め調べる」の方法を具体的に教えていただけませんか? 発想力? あぁ、アイツはいいやつでしたよ(´;ω;` )ブワッ
0そうだね
プレイ済み
返信[13]
親投稿
ねこはかせ hgskdj2609
自キャラ(スプライト)の座標+8(またはー8)をチェックすれば、 あらかじめチェックしてる事になりますよね。 1)キー入力 2)自キャラのX,Y座標の進行予定方向に向かって+8(または、-8)のBGをチェックする。(予めチェック) 3)障害物があれば、BGOFSで スクロール禁止。 こんな感じで出来るんじゃないですか
0そうだね
プレイ済み
返信[14]
親投稿
ねこはかせ hgskdj2609
+8 (または、-8)の部分をもっと大きくすれば、接触より遥か前に BGの状態を知ることができる。つまり視界の表現技法にも使えます。 実際、私が作った『ロード・チェイサー』という車のゲームでは、 敵車から遥か先のBGをチェックさせて、事前に障害物を避けるよう プログラムしています。(つまり未来の進行予定方向を予めチェックさせている)
0そうだね
プレイ済み
返信[15]
親投稿
キルル2 kiruru2
ねこはかせさんの発言の通りです 「動いて壁にぶつかったら座標修正」でも「動いた先に壁あるなら動かない」でも、どちらでも大丈夫かと (自分の座標+動く量)が動いたあとの座標となり、(自分の座標+動く量*n)とすれば、遠くの壁を検知できます
0そうだね
プレイ済み
返信[16]
親投稿
HMF gunsofthemy
はい、なんやかんやありましたが結局こうなりました。(もはや意味不明) 12個の判定を使い、BGの隣にいるのか、またどこにいるのかを測定し、入力制限をかけることになりました。 もっと効率的な方法があるんだろうな~(泣)
0そうだね
プレイ済み
返信[17]
親投稿
HMF gunsofthemy
それでは閉めます。ありがとうございました!!
0そうだね
プレイ済み