すでにどなたかがやっておられたら、すいません。
猫の手 さんの「DEMON OF MAZE」や、法貴優雅 さんの「日曜ゾンビExtreme」での、レーダー表示がうまく再現できませんでした。
これはそれらと違って、3D表示レーダーです。
プロコン出品作"ANIMAL_ISLAND"のレーダー表示は、向きが固定されてて、見づらかったので、どうにか作ってみました。
以下、スクリプトです。これを「sample/hgimg4/」に入れて実行してみて下さい。
『RadarScreen_for_3D.hsp』実行動画
https://twitter.com/akiakinohiroro/status/1463410217169809416
試作ゲーム「迷路の島」実行動画
https://twitter.com/akiakinohiroro/status/1463419547671678980
RadarScreen_for_3D.hsp
#include "hgimg4.as" title "RadarScreen_for_3D.hsp" setcls CLSMODE_SOLID, $404040 gpfloor id_floor, 10, 10, $00ffff ; 床ノードを追加 setpos id_floor, 0, 0, 0 gppbind id_floor, 0 ; [地面]の物理設定 box_w=1.0 box_x=0.0 : box_y=box_w/2 : box_z=0.0 gpbox id_box, box_w, $ff0000 ; 珠音用箱ノードを追加 setpos id_box, box_x, box_y, box_z gppbind id_box, 1.0, 0.5 ; 珠音用箱の物理設定 gpload id_model,"res/tamane" ; モデル読み込み setscale id_model, 0.01,0.01,0.01 setpos id_model, box_x, box_y-box_w/2, box_z gpaddanim id_model,"run",0,700 ; "run"クリップを設定 gpact id_model,"run" ; "run"クリップを再生 ca_y= 15.0 setpos GPOBJ_CAMERA, 0, ca_y, 0.1 ; カメラ位置を設定 ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ *Main_Loop stick key,15 ;■ [方向]キー if key&128 : end ;■ [Esc] ; ◆ カメラの高度 getkey k,16 : if k { ;■ [SHIFT]キー ca_y=ca_y+0.15 : if ca_y>23.0 : ca_y=23.0 } getkey k,17 : if k { ;■ [CTRL]キー ca_y=ca_y-0.15 : if ca_y<8.0 : ca_y=8.0 } ; ◆ カメラの向き(回転) if key&1 : ca_cnt++ : if ca_cnt=256 : ca_cnt=0 ;■ [←]キー if key&4 : ca_cnt-- : if ca_cnt=-256 : ca_cnt=0 ;■ [→]キー ; ◆ [↑]キーで、前進 if key&2 { ; [モデルの向きの変化量] が [カメラの向きの変化量] と違うならば if model_cnt!=ca_cnt : gosub *model_cnt_set ; [モデルの向きの変化量] が [カメラの向きの変化量] に同じならば if model_cnt=ca_cnt { ; deg2rad(ca_deg) = カメラ角度(ca_deg)をラジアンに変換して ca_deg=1.0*360*ca_cnt/256 Mx=sin deg2rad(ca_deg)*(0.05) Mz=cos deg2rad(ca_deg)*(0.05) ; 珠音用箱に[GPPAPPLY_IMPULSE](=瞬間的な衝撃)を与える gppapply id_box, GPPAPPLY_IMPULSE, Mx, 0.0, Mz } setangr id_model, 0.0, model_cnt, 0.0 } ; 珠音を 珠音用箱位置に セット getpos id_box, box_x, box_y, box_z setpos id_model, box_x, box_y-box_w/2, box_z ; カメラ位置を設定(高度=ca_y) ; モデルの真上にすることで、レーダーの中央に setpos GPOBJ_CAMERA, box_x, ca_y, box_z ; カメラの向き(回転)を設定 ; X軸回転で真下に向け、その時 垂直方向の回転軸になる Z軸で(+180)して 回転 setang GPOBJ_CAMERA, deg2rad(-90), 0, deg2rad(1.0*ca_cnt/256*360+180) ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ redraw 0 ; 描画開始 gpdraw ; シーンの描画 color 255,255,255 pos 10,10 mes "カメラ高度\n = [SHIFT / CTRL] キー" mes " " mes "カメラ・モデル回転\n = [← / →] キー" mes " " mes "モデル前進\n = [↑] キー" redraw 1 ; 描画終了 await 1000/60 ; 待ち時間 goto *Main_Loop ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ *model_cnt_set ; [モデルの向きの変化量] が [カメラの向きの変化量] より大きいならば if model_cnt>ca_cnt { sa=model_cnt-ca_cnt if sa<=128 : model_cnt-- : if model_cnt<ca_cnt : model_cnt=ca_cnt if sa>128 : model_cnt++ : if model_cnt>(ca_cnt+256) : model_cnt=ca_cnt } ; [モデルの向きの変化量] が [カメラの向きの変化量] より小さいならば if model_cnt<ca_cnt { sa=model_cnt-ca_cnt if sa>=-128 : model_cnt++ : if model_cnt>=ca_cnt : model_cnt=ca_cnt if sa<-128 : model_cnt-- : if model_cnt<=(ca_cnt-256) : model_cnt=ca_cnt } return