sample\hgimg3\meshmap7.hsp » Plain Format
#include "hgimg3.as"
#const COL_MY 1
#const COL_TREE 2
; 自動追尾カメラサンプル
; (コリジョンを考慮しながら特定のオブジェクトを追尾します)
; (カーソルキー左右で回転、上下で前後に移動します)
;
randomize
screen 0,640,480,0
cls 4
hgini
; バッファサイズ
sx=32:sy=32
dim vmap,sx+1,sy+1
wave_init sx,sy
; テクスチャフォント表示の準備
;
setfont 16,16,12,1 ; font Tex select(cx,cy,px,mode)
texload "fontchr.bmp" ; フォントテクスチャの登録
; モデル登録(目玉)
;
addxfile m_xmodel,"eye.x"
modelcols m_xmodel, 20,20,20 ; コリジョンx,y,zサイズ
modelcols m_xmodel, 0,20,18,1 ; コリジョンweight,y,zサイズ
; モデル登録(影)
addeprim m_sd,EPRIM_CIRCLE
seteprim m_sd,0,2
seteprim m_sd,1,12
seteprim m_sd,2,4
seteprim m_sd,3,4
seteprim m_sd,16,$80000000
seteprim m_sd,17,$80000000
seteprim m_sd,18,$80000000
seteprim m_sd,19,$00000000
; 回転するイベントを登録
;
newevent ev_eyeanm
event_addang ev_eyeanm, 0, 0.02, 0
event_wait ev_eyeanm,30
event_jump ev_eyeanm,0
; 目玉を10個配置
;
repeat 10
gosub *newobj
loop
; モデル登録(木)
;
texload2 "tree.tga" ; テクスチャの登録
addplate m_tree,1,15,30,0,0,255,255,stat ; モデル登録
modelcols m_tree, 10,10,10 ; コリジョンx,y,zサイズ
modelcols m_tree, 1,22,10,1 ; コリジョンweight,y,zサイズ
regobj tree, m_tree, OBJ_STATIC|OBJ_TREE|OBJ_LATE
objfloor tree, 15
setcoli tree,COL_TREE
setpos tree, 0, -10, 20
; モデル登録(地面)
;
setuv 0,0,128,128
addmesh m_mesh,sx,sy,0,320,320
texload "mapbg4.bmp"
regobj obj, m_mesh,OBJ_GROUND ; 地面として登録
setborder 300,300,300 ; 移動範囲の設定
; 高さ、UVマップの設定
;
gsel 3
picload "g_road.bmp"
getvarmap vmap,sx,sy,1
picload "g_river.bmp"
getvarmap vmap,sx,sy,2
meshmap vmap,m_mesh,$100
picload "g_height1.bmp"
getvarmap vmap,sx,sy
meshmap vmap,m_mesh,0,0.1
; 表示の準備
;
gsel 0
clscolor $60e0 ; 背景色の設定
; カメラの設定
;
ddim fv,4
px=0.0:pz=0.0
camdist=50.0
camheight=-6.0
cammode CAM_MODE_AUTOMOVE, mychr
setpos HGOBJ_CAMERA, sin(dy)*20+x,0,cos(dy)*20+z ; カメラ位置の設定
setdir HGOBJ_CAMERA, 0, -4, 0
setwork HGOBJ_CAMERA, camdist, 0, camheight
objfloor HGOBJ_CAMERA, 16 ; 地面からのオフセット値
frame=0
scfade=0
scfadev=256
gosub *fadein
*main
gosub *alldraw
stick key,$3ff
if key&128 : goto *main2
; カーソルキーで動かす
; (オブジェクトの移動量を変えることで動かしている)
;
if key&2 : dp=-1.0 : gosub *go_fwd
if key&8 : dp=1.0 : gosub *go_fwd
if key&1 : addang mychr,0,0.1,0
if key&4 : addang mychr,0,-0.1,0
goto *main
*main2
gosub *fadeout
repeat
gosub *alldraw
if scfadev=256 : break
loop
*owari
end
*go_fwd
; 向いている方向に移動
;
getang mychr, fv,fv(1),fv(2)
fv(1)*=-1:fvdir fv,0,0,dp
objwalk vres,mychr,fv,1,fv(2)
return
*newobj
; 目玉を1つ出すサブルーチン
;
x=rnd(100)-50:z=rnd(100)-50
regobj mychr, m_xmodel,OBJ_BORDER|OBJ_FLIP|OBJ_STAND|OBJ_MOVE|OBJ_GRAVITY|OBJ_STATIC
;setevent mychr, ev_eyeanm
setpos mychr,x,-30,z
setangr mychr,0,rnd(256),0
objfloor mychr,8 ; 地面からのオフセット値を指定する
setcoli mychr,COL_MY,COL_MY|COL_TREE
regobj mysdw, m_sd, OBJ_LATE|OBJ_LAND|OBJ_STAND ; 半透明なのでOBJ_LATEを指定する
setefx mysdw,$500 ; 半透明(色減算)の指定
objchild mychr, mysdw ; 目玉の子供として影を登録
return
*alldraw
; フレーム描画のサブルーチン
;
hgdraw ; 描画
fprt "Frame:"+frame,8,8
if scfade { ; フェード処理
scfadev += scfade
if scfadev>255 : scfadev=256
if scfadev<1 : scfadev=0 : scfade=0
color 0,0,0:gmode 3,640,480,scfadev
hgrect 320,240,0
}
hgsync 15 ; 時間待ち
frame++
return
*fadein
scfade=-4
return
*fadeout
scfade=4
return