spr3d_1.hsp

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