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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0619
hedamdHGIMGの当たり判定と旋回3解決


hedamd

リンク

2006/6/19(Mon) 22:33:06|NO.1153

先日未熟にも関わらず初めて3Dに挑戦してみました…
早速壁にぶつかってしまいました…
一応自分なりにはインターネットで検索したり
付属の[hgimg3.txt]を何回も読んで理解に努めたのですが…
分かりませんでしたので質問させてください…

あと、スクリプトも間違ってたり、意味不明なところがございましたら
ご指導宜しくお願いします。

まず、私がやりたいことは ←or→ キーを押すと左右にに移動ではなく旋回したいのですが
どのように組めばよろしいのでしょうか?
(スターフォックス64でいうオールレンジモードみたいな (古!!))

もう一つは当たり判定を入れたんですけども、判定できません…
どこを修正すればよろしいのでしょうか?

あと、このスクリプトですがいくつか別ファイルが必要になります。
お手数をおかけしますが、回答宜しくお願いします。

記述したスクリプトを載せます


#include "hgimg3.as" #runtime "hsp3hg" #packopt type 0 #packopt name "tt3" screen 0,640,480,0 title "TEST Three Dimensions" hgini setfont 16,16,12,1 texload "font.bmp" ; デバッグ用メッセージフォント texload "back01.jpg" ; 背景ロード clstex stat ; 背景に設定 addxfile plane,"plane.X" ; モデル読み込み regobj main,plane ; オブジェクト登録 setpos main,0,0,0 texload "load.jpg" setsizef 640,640 addmesh wide,8,8,16,,,stat regobj wash,wide,OBJ_XFRONT setpos wash,0,0,0 modelshade plane,1 setobjmode main,OBJ_MOVE,2 nz = 1.0 ny = -10 setcoli main,1,2 setcoli wash,2,1 *mlp hgdraw ; 描画処理 setpos main,nx,ny,nz setpos HGOBJ_CAMERA,nx,ny-1,nz+6 setangr main,arx,ary,arz stick ky,31 if ky = 0 { if arx > 0 : arx - 8 if ary > 0 : ary - 8 if arz > 0 : arz - 8 if arx < 0 : arx + 8 if ary < 0 : ary + 8 if arz < 0 : arz + 8 } if ky & 8 { ny - 1 if arx < 30 : arx + 4 } if ky & 2 { ;if ny < -4{ ny + 2 ;} if arx > -30 :arx - 4 } if ky & 4 { nx + 1 if ary > -30 : ary - 4 : arz - 4 } if ky & 1 { nx - 1 if ary < 30 : ary + 4 : arz + 4 } if ky & 16 { nz + 8 } nz - 1 getcoli hant,main,2 ; 当たり判定(のはず) ;当たり判定 if hant ! -1 : end fprt ""+nx+":"+ny+":"+nz+"",0,0 fprt ""+arx+":"+ary+":"+arz+"",0,16 hgsync 10 ; ウェイト goto *mlp



この記事に返信する


がぉ

リンク

2006/6/20(Tue) 13:19:59|NO.1157

たぶん、こりジョンの、2が、フロートチではないからだと思います



Drip

リンク

2006/6/20(Tue) 23:55:10|NO.1167

Dripです。

 hedamd さん、こんにちは。当たり判定がされないとのことですが、
ちゃんとされてますよ。(^^;
単に当たり判定が狭くて、判定されないだけです。
ためしにヒット領域を2から200にしてみてください。ヒットが確認できるはずです。
※がぉさんの指摘は誤りです。ヒット領域は整数値で記述しても問題ありません。

//下のサンプルはHGIMG3.1β3専用です。アップデートしていないHGIMG3では法線のバグで何も表示されません。
//レーザーで隕石を壊します。

#include "hgimg3.as" #define lsmax 16 #define enmmax 30 hgini:texmake 640,64:msg=stat:texcls meg:font "MS Pゴシック",14:color 255,255,255 texmes "フォックス",msg,10,10:texmes "オールレンジモードに切り替える。",msg,20,30 texmes "全機、アステロイドベルトに突入するぞ!",msg,20,50 addbox plr,10,10:setcolor 255,140,120:addbox enm,10,10:setcolor 100,200,255:addplate laser,0,4,16 newevent ev:event_efx ev,30,0:event_scale ev,15,4,4,4:event_wait ev,30 repeat enmmax regobj tmp,enm setcoli tmp,4 //敵機に当たり判定用IDを設定 selpos tmp:objset3 rnd(400),rnd(40)-20,rnd(400) loop regobj p,plr:selpos p:objset3 -200,0,-200:yang=-2.5:yrot=0.0:xrot=0.0:time=0,0 dim ls,lsmax:dim lsc,lsmax:gsel 0 selang HGOBJ_LIGHT:objset1 1,yang repeat hgdraw:stick ky,15 if ky&1:if yrot<0.03:yrot+=0.003 //旋回・左 if ky&4:if yrot>-0.03:yrot-=0.003 //旋回・右 if ky&2:if xrot<0.1:xrot+=0.003 //下降 if ky&8:if xrot>-0.1:xrot-=0.003 //上昇 if ky&16:{ //自分の向いている方向にショットを撃つ selpos p:objgetfv fv repeat lsmax if ls(cnt)=0:{ //空いてるレーザーID取得 regobj ls(cnt),laser selpos ls(cnt):objsetfv fv selang ls(cnt):objset2 0,-1.5708,yang lsc(cnt)=0 setcoli ls(cnt),1,4 //レーザーに当たり判定用IDを設定 break } loop } if yrot>0:yrot-=0.002:if yrot<0:yrot=0.0 //旋回角度は徐々に0に近づく if yrot<0:yrot+=0.002:if yrot>0:yrot=0.0 //旋回角度は徐々に0に近づく if xrot>0:xrot-=0.001 //下降角度は徐々に0に近づく if xrot<0:xrot+=0.001 //上昇角度は徐々に0に近づく yang+=yrot //旋回角度を自機の角度に加算 selang p:objset1 1,yang:selpos p:objadd3 -sin(yang),xrot*10,-cos(yang) objgetfv fv selpos HGOBJ_CAMERA:objsetfv fv //後追いカメラ位置・角度設定 objadd3 sin(yang)*50,-20,cos(yang)*50 selang HGOBJ_CAMERA:objset1 1,yang gosub *lsrut pos 320,32:gmode 2,640,64:hgrotate msg hgsync 15 time++ if time(1)>0:time(1)++:if time(1)=1000:hgbye:end loop *lsrut //レーザーの移動と当たり判定 repeat lsmax if ls(cnt)!0:{ //有効なレーザーID発見 selang ls(cnt):objgetfv fv selpos ls(cnt):objadd3 -sin(fv(1))*10,0,-cos(fv(1))*10 lsc(cnt)++ getcoli tmp,ls(cnt),10 //当たり判定 if tmp>-1:{ setevent tmp,ev setcoli tmp,0 lsc(cnt)=32000 score++ if score=1:texcls msg //おまけ if score=4:texcls msg:texmes "ペッピー",msg,10,10:texmes "上昇、下降をうまく使え!(アローキー↑↓)",msg,20,30 if score=8:texcls msg if score=9:texcls msg:texmes "ペッピー",msg,10,10:texmes "自分の感覚を信じるんだ!",msg,20,30 if score=12:texcls msg if score=18:texcls msg:texmes "スリッピー",msg,10,10:texmes "フォックス〜、後ろの敵をなんとかしてよ!",msg,20,30 if score=22:texcls msg if score=24:texcls msg:texmes "ファルコ",msg,10,10:texmes "フォックス、とっとと片付けちまおうぜ!",msg,20,30 if score=enmmax-1:texcls msg if score=enmmax:texcls msg:texmes "フォックス",msg,10,10:texmes "隕石郡全破壊を確認。全機、ペパー将軍からの指令を待て。",msg,20,30:time(1)=1 } if lsc(cnt)>40:delobj ls(cnt):ls(cnt)=0 } loop return



hedamd

リンク

2006/6/21(Wed) 00:15:45|NO.1168

(>Д<)!解決!!
 ↑違

がぉさん ご指摘ありがとうございます!
Dripさん 素晴らしいサンプルスクリプトまでありがとうございます。
記述していただいたサンプルで20分ぐらい夢中で遊んでいました。(笑)

ちょうど今当たり判定は解決していたのですが、
オールレンジモード(?)やレーザーの連続うちのスクリプトも悩んでいたのですが
一気に全て解決しました。(texmesという命令、知らなかった(恥))

本当にありがとうございました!
(_ _)

また、ご教授宜しくお願いします。



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