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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1122
cd(hgimg3)setcoliを使ったコリジョン設定4解決


cd

リンク

2008/11/22(Sat) 00:17:00|NO.20948

hgimg3を使って3Dのレースゲームを作っている最中です。

各あたり判定としてsetcoliを使ったコリジョン設定を使おうと思っているのですが、
なぜかうまく動きません。


setcoli (障害物のオブジェクトID),1,8 setcoli (障害物のオブジェクトID),1,2 setcoli (プレイヤーのオブジェクトID),8,1 setcoli (敵のオブジェクトID),2,1 setcoli (プレイヤーのオブジェクトID),8,2 setcoli (敵のオブジェクトID),2,8

「プレイヤーのオブジェクト」「敵のオブジェクト」「障害物のオブジェクト」の3種類を
コリジョン設定の三角関係(?)にする事は出来ないのでしょうか?



この記事に返信する


M

リンク

2008/11/22(Sat) 13:17:06|NO.20956

僕は、接触の判定するたびに、コリジョンの設定をしました。
こんなかんじです。

setcoli (障害物のオブジェクトID),1 repeat ;プレイヤーと敵との接触を調べる setcoli (プレイヤーのオブジェクトID),8,2 getcoli val,(プレイヤーのオブジェクトID),検出半径 /* 衝突処理 */ ;プレイヤーと障害物との接触を調べる setcoli (プレイヤーのオブジェクトID),8,2 getcoli val,(プレイヤーのオブジェクトID),検出半径 /* 衝突処理 */ ;敵と障害物との接触を調べる setcoli (敵のオブジェクトID),2,1 getcoli val,(敵のオブジェクトID),検出半径 /* 衝突処理 */ loop

以下、ちょっと長いのですが、サンプルです。
カーソルキーで自分を、w,a,s,dで敵が動かせます。
接触していれば、titleバーの値が変わります。

#include "hgimg3.as" hgini setsizef 10,10 setcolor 255,0,0:addbox mdl1:regobj objPLAYER,mdl1 ;赤=自分 setcolor 0,255,0:addbox mdl2:regobj objENEMY,mdl2 ;緑=敵 setcolor 0,0,255:addbox mdl3:regobj objWALL,mdl3 ;青=障害物 setpos objPLAYER,10,0,0 setpos objENEMY,-10,0,0 setpos objWALL,0,0,0 setpos HGOBJ_CAMERA,0,-40,40 cammode CAM_MODE_LOOKAT setcoli objWALL,1 repeat getkey ky,37:if ky!0:addpos objPLAYER,-1,0,0 getkey ky,39:if ky!0:addpos objPLAYER, 1,0,0 getkey ky,38:if ky!0:addpos objPLAYER, 0,0,-1 getkey ky,40:if ky!0:addpos objPLAYER, 0,0,1 getkey ky,65:if ky!0:addpos objENEMY,-1,0,0 getkey ky,68:if ky!0:addpos objENEMY, 1,0,0 getkey ky,87:if ky!0:addpos objENEMY, 0,0,-1 getkey ky,83:if ky!0:addpos objENEMY, 0,0,1 ;プレイヤーと敵との接触を調べる setcoli objPLAYER,8,2 getcoli val1,objPLAYER,10 ;プレイヤーと障害物との接触を調べる setcoli objPLAYER,8,1 getcoli val2,objPLAYER,10 ;敵と障害物との接触を調べる setcoli objENEMY,2,1 getcoli val3,objENEMY,10 title "自と敵"+str(val1)+" 自と障"+str(val2)+" 敵と障"+str(val3) hgdraw hgsync 15 loop



cd

リンク

2008/11/23(Sun) 10:50:39|NO.20971

やっぱり何度もコリジョン設定をする方法しかありませんか。

ありがとうございました。



M

リンク

2008/11/23(Sun) 11:34:22|NO.20972

初期設定のbug

setcoli objWALL,1
の後に、
setcoli objPLAYER,8
setcoli objENEMY,2
も書いておかないと、最初のループでの衝突判定をしてくれない。はず!



いなえ

リンク

2008/11/23(Sun) 18:54:00|NO.20984

setcoli命令のパラメータにおける
「衝突を検出する対象となるグループ値」
には、グループ値の和(論理和の方が望ましい)を指定すれば
複数のグループを同時に衝突の対象とすることができます。
また、自分が属するグループ値を指定するためだけに
用いることもできます。(その場合、衝突検出対象は無し)
なお、getcoli命令等による衝突の検出は一方的なものなので
setcoli命令で双方向の設定をする必要はありません。



#include "hgimg3.as" //グループ値の定義 #define PLAYER_GROUP 1 #define WALL_GROUP 2 #define ENEMY_GROUP 4 //HGIMG3の初期化 screen 0,320,240 hgini //player(青) setcolor 0,0,255 addbox model,5,5 regobj player,model setpos player,-10,5,0 //wall(緑) setcolor 0,255,0 addbox model,5,5 regobj wall,model setpos wall,10,5,0 //enemy(赤) setcolor 255,0,0 addbox model,5,5 regobj enemy,model setpos enemy,0,-10,0 //コリジョン設定 setcoli player,PLAYER_GROUP,WALL_GROUP|ENEMY_GROUP setcoli wall,WALL_GROUP setcoli enemy,ENEMY_GROUP *main //キー入力情報取得 stick ky,15 //ESCキーで終了 if ky&128:end //矢印キーでplayerを移動 if ky&1:addpos player,-0.5 if ky&2:addpos player,,-0.5 if ky&4:addpos player,0.5 if ky&8:addpos player,,0.5 //playerに衝突しているオブジェクトを削除 getcoli obj,player,5 if obj>=0:delobj obj //描画して*mainへ hgdraw hgsync 20 goto *main



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