|
 |
|
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が、フロートチではないからだと思います
|
|
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

| |
|
2006/6/21(Wed) 00:15:45|NO.1168
(>Д<)!解決!!
↑違
がぉさん ご指摘ありがとうございます!
Dripさん 素晴らしいサンプルスクリプトまでありがとうございます。
記述していただいたサンプルで20分ぐらい夢中で遊んでいました。(笑)
ちょうど今当たり判定は解決していたのですが、
オールレンジモード(?)やレーザーの連続うちのスクリプトも悩んでいたのですが
一気に全て解決しました。(texmesという命令、知らなかった(恥))
本当にありがとうございました!
(_ _)
また、ご教授宜しくお願いします。
|
|