HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1107
かってぃんぐ線分での当たり判定(E3D)8解決


かってぃんぐ

リンク

2008/11/7(Fri) 21:58:55|NO.20679

FPS制作で重要なあたり判定について。
ロボットゲームなどではSIGを飛ばし、敵に当たれば
弾を消してHPをへらす方法などがありますが、一瞬
で弾が壁につく方法でやっています。


画面中央にSIGを調べる線分をおいているのですが、
これだけだと一直線上にすう体のSIGモデル(敵)が
ある時全員分が当たったことになります。

これを避けるには当たったSIGがこちらのカメラに
一番近いSIGにのみHPを減らせば良いと思いますが、
スクリプトが分かりません。ちなみに敵モデルは
#constなどで個数を変更できるようにしているので
それにも対応できるスクリプト出なければなりません。



この記事に返信する


リンク

2008/11/7(Fri) 23:16:35|NO.20682

あたったらすぐあたり判定をやめさせればいいので

repeat 数
 あたり判定
 if あたった:break
loop

こんな感じでどう



リンク

2008/11/7(Fri) 23:21:14|NO.20684

御免、上のじゃ無理だった



GENKI

リンク

2008/11/7(Fri) 23:39:04|NO.20685

カメラ座標(cx, cy, cz)
線分が衝突したsigの座標(sx, sy, sz)
としたときのカメラとsigとの距離は、
E3DVec3Length sx-cx, sy-cy, sz-cz, ln
として求めることが出来ます。…今気づきましたが、ヘルプにも書いてましたね。
後は、衝突検出したsigモデルのうち距離が一番近い(小さい)sigを選べばいいだけです。

ベクトルの基本を知っていれば簡単な問題ですね。
3Dをやるならベクトルについて調べておいたほうが楽にプログラミングできますよ。



かってぃんぐ

リンク

2008/11/7(Fri) 23:56:01|NO.20687

すみません私の説明不足でした。
ベクトルを求める方法は分かるんです。

当たった際の一番近いSIGをどのようなスクリプト
で選び出すのかが分からないのです。



リンク

2008/11/8(Sat) 00:34:24|NO.20689

自分のソースの一部

saiS=10000.0

cnt0=cnt
repeat 20
vsx.cnt=suix.cnt-x.cnt0
vsz.cnt=suiz.cnt-z.cnt0
E3DVec3Length vsx.cnt,vsy.cnt,vsz.cnt,imakyo.cnt
E3DChkConfWall2 x.cnt0,y.cnt0,z.cnt0 , suix.cnt,suiy.cnt,suiz.cnt , wall , 50, rtw3.cnt , awx3,awy3,awz3 , nwx3,nwy3,nwz3
hakariS.cnt=imakyo.cnt
if hakariS.cnt < saiS & rtw3.cnt=0 : saiS = hakariS.cnt :Sai=cnt
loop



sei

リンク

2008/11/8(Sat) 01:15:32|NO.20690

基本的にはGENKIさんや、え、さんのスクリプト
にあるように、距離を判定するE3DVEC3LENGTHという
関数があります。これを使えば少なくとも質問の趣旨でもある
問題を避ける、という事ができますよね?



orz

リンク

2008/11/8(Sat) 15:16:38|NO.20699

>すみません私の説明不足でした。
>ベクトルを求める方法は分かるんです。

ベクトルの算出方法がわかっても利用方法がわからないといけません。
線分に当たった全ての敵の座標と線分の始点との距離を比べれば、どの敵が始点に一番近いかは一目瞭然では・・・?



かってぃんぐ

リンク

2008/11/8(Sat) 18:21:43|NO.20702

皆様どうもありがとうございます。解決いたしました。


if hakariS.cnt < saiS & rtw3.cnt=0 : saiS = hakariS.cnt :Sai=cnt

これでどんどん的を絞っていくわけですね。



ONION software Copyright 1997-2023(c) All rights reserved.