sample\sprite\spr3d_1.hsp » Plain Format
#use hsp3dish
;
; 疑似3D sprite sample 1
;
; 2Dスプライトを使った疑似3Dの表示を行うサンプルです
; カーソルキーで上下左右、[A][D]キーでZ方向に移動します
; 320×224画面を4倍のドットで表示しています
;
#define ZMUL (128) ; 3D座標計算の基準値
#define G_SHIP (3) ; 画像を読み込むバッファID(自機)
#define CHR_SHIP (1) ; キャラクタNo.(自機)
#define SPR_SHIP (1) ; スプライトID(自機)
sx=320:sy=224 ; ゲーム全体のサイズ
zoom=4 ; 4倍に拡大して表示する
wx=sx*zoom:wy=sy*zoom ; ウインドウサイズを求める
hsx=sx/2:hsy=sy/2 ; 画面の中央座標を求める
screen 0,wx,wy ; ウインドウを設定する
celload "myship.png",G_SHIP ; 画像読み込み
es_ini ; スプライト初期化
es_spropt 1,1 ; スケールとクリップのオプションを設定
; キャラクターの登録
es_sizeex 128,128,,,,,,-64,-64 ; 全体サイズと中心座標を設定
es_pat CHR_SHIP, 0,0,0,G_SHIP ; CHR_SHIPとしてキャラクタを登録
es_set SPR_SHIP, hsx,hsy, CHR_SHIP ; SPR_SHIPとしてスプライトを登録
es_flag SPR_SHIP,ESSPFLAG_NOWIPE,1 ; 画面外で消去されないように設定
; 自機の座標を初期化
myx=0:myy=10:myz=60:myr=0
*main
; キーボードで動かす
stick key,$1ffff
if key&128 : end
if key&1 : myx--
if key&4 : myx++
if key&2 : myy--
if key&8 : myy++
if key&$4000 : myz--
if key&$10000 : myz++
redraw 0 ; 画面更新の開始
rgbcolor $00a1ff:boxf ; 背景をクリア
viewcalc vptype_2d,zoom,zoom,0 ; ズームを適用する
viewcalc vptype_translate,hsx,hsy ; 座標(0,0)を画面中央に設定する
; 3Dの計算
zdiv=myz
if zdiv=0 : zdiv=1 ; 0で除算しないように
x=myx*zmul/zdiv ; X座標を求める
y=myy*zmul/zdiv ; Y座標を求める
px=30*zmul/zdiv ; 全体のサイズを求める
es_pos SPR_SHIP, x,y ; スプライト座標設定
es_setrot SPR_SHIP,myr,px,px ; スプライト回転拡大設定
es_draw ; スプライト描画
viewcalc vptype_2d,1,1,0 ; ズームを元に戻す
viewcalc vptype_translate,0,0 ; 座標(0,0)を左上に設定する
; X,Y,Z座標を表示する
rgbcolor -1
pos 0,0:mes "("+myx+","+myy+","+myz+")"
redraw 1 ; 画面の更新
await 1000/60
goto *main