画像と当たり判定

アバター
SAI
記事: 115
登録日時: 14年前
住所: はひほーひ

画像と当たり判定

投稿記事 by SAI » 14年前

画像
画像の中心と当たり判定の中心を合わせる作業をしました。
これが意外と難しい。
頑張って真ん中に寄せようとしても、いかんせんずれてしまいます。
しかも1ピクセル単位でしか動かせないので修正不可(T_T)
こうなったら描画の際に微調整するしかありません。
そんなわけでコンマ刻みにするわけですが・・・。
これがなかなか難しい。
あっちを立てればこっちが立たず・・・。
当たり判定が0.5ピクセルを争うの世界なので気を遣っています。が。
どうしてもずれます。1ピクセル未満ですが、目に見えてずれてます。
こうなったら、下方向へ飛ぶ場合が多いので、下向きの画像に合わせることにします。
うーん、無念(´・ω・`)ショボーン

アバター
kimuchi
記事: 163
登録日時: 14年前

Re: 画像と当たり判定

投稿記事 by kimuchi » 14年前

私が今作ってる弾幕STGでも同じ現象が起こってうなってたんですが、
画像作成時にサイズを縦も横も奇数に調整したらうまく合わせられました。

見当違いでしたら生暖かい目で見てやってください・・・

アバター
ナムアニクラウド
記事: 16
登録日時: 14年前

Re: 画像と当たり判定

投稿記事 by ナムアニクラウド » 14年前

SAIさんの状況はこんな感じ?
 ・敵弾は「弾クラス」で表現し、それはグラフィックハンドルとx座標・y座標を持っている。
  当たり判定は判定関数に座標を渡して判定する。
  つまり「当たり判定の中心」=「弾の座標」
 ・画像のサイズが X*Yピクセルだったら、画像の( X/2, Y/2 )の位置を中心に描画したい

 その場合自分ならDXライブラリのDrawRotaGraph関数を使います。
画像の中心を、指定した座標に合わせてくれますので、
「当たり判定の中心座標」を指定してあげるといいと思います。
小数点以下の精度はどうなるか分かりませんが・・・

 ところで、「下向きの画像に合わせる」と書いてありますが、
画像は向きごとに別のグラフィックを使っていますか?
もしそうだとしたら、画像は1方向だけにして、DrawRotaGraph関数で回転描画することをおすすめします。

自分は下向きの弾画像を用意して、(弾の向き - 90°)だけ回転して描画してます。
弾の向きは、Atan2( 速度ベクトルのy成分, 速度ベクトルのx成分 ) で取得できます。
速度を変数に保持していないと難しいですが・・・

 弾幕作ってる者どうし、頑張りましょう。
作ってますよ?

アバター
GRAM
記事: 164
登録日時: 14年前

RE: 画像と当たり判定

投稿記事 by GRAM » 14年前

ぱっとヘッダ見ただけなのですが
int DrawGraphF( float xf, float yf, int GrHandle, int TransFlag ) ;
とかいう関数と
int SetDrawMode( int DrawMode ) ;
でバイリニア(DX_DRAWMODE_BILINEAR)とかDX_DRAWMODE_ANISOTROPIC(ここまでする必要はない気がしますが)
でも指定してやることで誤魔化せないのですかね?

アバター
SAI
記事: 115
登録日時: 14年前
住所: はひほーひ

Re: 画像と当たり判定

投稿記事 by SAI » 14年前

>kimuchiさん
まさか・・・奇数にするだけでそんな簡単にうまくいくわけが・・・
いったー!?
まだちょっとやってみただけですが、なんかうまくいきそうです!
そうか・・・。奇数なら丁度中心を合わせられるんですね・・・。
もう少しやってみます!ありがとうございました!

>ナムアニクラウドさん
アドバイスしていただいてありがとうございます。
DrawRotaGraph関数はintしか渡せないし、回転の中心指定もできないので、DrawRotaGraph2F関数を使っています。
もちろん画像は一つですよ。
ただ、回転の中心指定でどうしてもどれかがずれてしまうために、やむなく上向きの画像には遠慮してもらったというわけです。

そんなわけで頑張りましょう!
あのSTGの完成期待してます!

>GRAMさん
コメントありがとうございます。
実はもうやってるのです・・・。
でもバイリニア法に変えてもいまいち効果がわからなかったり(-_-;)
問題なのは、作った画像の中心が当たり判定の中心であるべきなのに、それができないということなのです。