はじめまして。ボブです。宜しくお願いします。
現在ボンバーマン風のゲームを作っています。
キャラクターが爆弾を出して、その爆弾は以後通り抜けできない障害物として処理したいのです。
前に爆弾があって進めないという判定をピタゴラスの定理を使ってやっています。
しかし、爆弾を出す際は、キャラクターが爆弾の上に重なってるので、↑のピタゴラスの定理を使った進めない判定の処理をした場合動けなくなってしまうので、置いたときにはその処理は行わないようにフラグを立てて、爆弾上に重なってても動けるようにしてます。
そこで、「爆弾を出してから キャラクターが爆弾上から離れた」という判定を行い ↑のフラグを消して、以後は障害物として扱おうと考えています。
しかし、「キャラクターが爆弾上から離れた」という判定の方法がなかなか 思いつきません。
何かいい判定方法はないでしょうか?
重なってる物から離れたという事を判定したいのですが。。
Re:重なってる物から離れたという事を判定したいのですが。。
>「キャラクターが爆弾上から離れた」という判定の方法がなかなか
進めない判定の場合は爆弾との距離がある値より小さければ進めない、というような感じで
行っているわけですよね?
であれば離れた判定は爆弾と重なっている時は一定の距離より小さいけど
離れれば一定の距離より大きくなるはずなのでそれを利用すれば判るのではないでしょうか。
Re:重なってる物から離れたという事を判定したいのですが。。
マップチップのように扱うのはどうですか?
マップは
0が壁
1が床
2が爆弾
で動く時に向きを見て1マス先に爆弾や壁がなかったら移動っていうのはどうでしょう。
マップは
0が壁
1が床
2が爆弾
で動く時に向きを見て1マス先に爆弾や壁がなかったら移動っていうのはどうでしょう。
Re:重なってる物から離れたという事を判定したいのですが。。
単純に自身の座標との当たり判定を行わないのが良いんじゃないでしょうか。
マップチップとしても、動的オブジェクト配置にしていても結局自身の座標は「自分が居る以上歩行可能」として扱っているわけなので、爆弾を置いた際もチェックの必要がありません。
自身の座標が切り替わる(恐らく爆弾形状半分以上超えた)場合、それ以降戻ることが出来なくなります。
そのタイミングを完全に爆弾と重ならない状態になったら、というのだと少し工夫が必要になりますね。
接触判定に「既に接触状態(めり込んでいる状態)だったら」という分岐を作るのが無難じゃないかと。
マップチップとしても、動的オブジェクト配置にしていても結局自身の座標は「自分が居る以上歩行可能」として扱っているわけなので、爆弾を置いた際もチェックの必要がありません。
自身の座標が切り替わる(恐らく爆弾形状半分以上超えた)場合、それ以降戻ることが出来なくなります。
そのタイミングを完全に爆弾と重ならない状態になったら、というのだと少し工夫が必要になりますね。
接触判定に「既に接触状態(めり込んでいる状態)だったら」という分岐を作るのが無難じゃないかと。
Re:重なってる物から離れたという事を判定したいのですが。。
ピタゴラスの定理をお使いになっているのであれば
ゲームプログラミングの館のs11章のように
range = 自機範囲 + 爆弾の障害物範囲;
x = 自機.x - 爆弾.x;
y = 自機.y - 爆弾.y;
当たり判定:x^2 + y^2 < range^2 には行けなぃ(接触は出来なぃ)
のような形で判定されているのではなぃかと思います
ここでご質問にあるような状態はJusty様の云われるような一定の距離より大きくなる瞬間
つまり爆弾とキャラが接触から隣接状態への移行の瞬間ですので
x^2 + y^2 = range^2 となった瞬間
(もしくは x^2 + y^2 < range^2 から初めて x^2 + y^2 >= range^2 になった瞬間)
にフラグを消してあげればいいのではなぃでしょうか?
※ここからは蛇足
上記のフラグで気になる点がありましたので列記してみます
・モンスターや2P側も爆弾設置フラグが消えるまではすり抜け可能になるかも
・モンスターや2P側と爆弾を一部重ねて設置できると相手は動けなくなるかも
・モンスターや2P側と極近い距離の時に、
爆弾設置(二人とも重なる)→自分だけ逃げる(爆弾の移動禁止判定が復活する)→相手だけ爆弾に重なって動けなくなるかも
フラグ以外にも
x^2 + y^2 < range^2 の当たり判定を少し移項して
0(完全に重なった状態) < (x^2 + y^2) / range^2 < 1(隣接した状態) なら接触
1(隣接した状態) <= (x^2 + y^2) / range^2 なら問題無し
ただし離れる方向(0から1の方向、つまり+方向)には接触中も移動可能と切り替えてみる方法も出来るかもしれません
(引き返すことが出来なぃ判定にはなってしまいますが…)
ただし上記の回答は龍神録のように自由な移動及び自由な爆弾の設置が可能なボンバーマンを想定したものです
情報がありませんので分かりませんが、マップチップ単位で爆弾の設置が出来る一般的(?)なボンバーマンでしたら、
ひよこ様やねこ様の仰られているような方法の方がシンプルだと思います
ゲームプログラミングの館のs11章のように
range = 自機範囲 + 爆弾の障害物範囲;
x = 自機.x - 爆弾.x;
y = 自機.y - 爆弾.y;
当たり判定:x^2 + y^2 < range^2 には行けなぃ(接触は出来なぃ)
のような形で判定されているのではなぃかと思います
ここでご質問にあるような状態はJusty様の云われるような一定の距離より大きくなる瞬間
つまり爆弾とキャラが接触から隣接状態への移行の瞬間ですので
x^2 + y^2 = range^2 となった瞬間
(もしくは x^2 + y^2 < range^2 から初めて x^2 + y^2 >= range^2 になった瞬間)
にフラグを消してあげればいいのではなぃでしょうか?
※ここからは蛇足
上記のフラグで気になる点がありましたので列記してみます
・モンスターや2P側も爆弾設置フラグが消えるまではすり抜け可能になるかも
・モンスターや2P側と爆弾を一部重ねて設置できると相手は動けなくなるかも
・モンスターや2P側と極近い距離の時に、
爆弾設置(二人とも重なる)→自分だけ逃げる(爆弾の移動禁止判定が復活する)→相手だけ爆弾に重なって動けなくなるかも
フラグ以外にも
x^2 + y^2 < range^2 の当たり判定を少し移項して
0(完全に重なった状態) < (x^2 + y^2) / range^2 < 1(隣接した状態) なら接触
1(隣接した状態) <= (x^2 + y^2) / range^2 なら問題無し
ただし離れる方向(0から1の方向、つまり+方向)には接触中も移動可能と切り替えてみる方法も出来るかもしれません
(引き返すことが出来なぃ判定にはなってしまいますが…)
ただし上記の回答は龍神録のように自由な移動及び自由な爆弾の設置が可能なボンバーマンを想定したものです
情報がありませんので分かりませんが、マップチップ単位で爆弾の設置が出来る一般的(?)なボンバーマンでしたら、
ひよこ様やねこ様の仰られているような方法の方がシンプルだと思います
Re:重なってる物から離れたという事を判定したいのですが。。
私がボンバーマンを作った時はマップ側に情報を持たせていましたね
マップ用の変数(配列)の下位数bitをデフォルトのマス情報、その他bitを爆風があるか、爆弾が置いてあるか、キャラクターがいるか、
などのフラグとして使用していました
これが良いというわけではありませんがそれほど厳密に爆弾や障害物との当たり判定を求める必要はないかな、と思います
マップ用の変数(配列)の下位数bitをデフォルトのマス情報、その他bitを爆風があるか、爆弾が置いてあるか、キャラクターがいるか、
などのフラグとして使用していました
これが良いというわけではありませんがそれほど厳密に爆弾や障害物との当たり判定を求める必要はないかな、と思います
Re:重なってる物から離れたという事を判定したいのですが。。
沢山の返信ありがとうございます。遅くなってすみませんでした。
マップ側に情報をもたせるというのが、一番やりやすそうなので、マップ側に情報を持たせて見ようと思います。
Justyさん、ねこさん、ひよこさん、初心者ですさん、nayoさん、ありがとうございました。
マップ側に情報をもたせるというのが、一番やりやすそうなので、マップ側に情報を持たせて見ようと思います。
Justyさん、ねこさん、ひよこさん、初心者ですさん、nayoさん、ありがとうございました。