HSP tips

とりあえずここも暫定ページです。

gmulcolorと表示深度のサンプル


HSP3.5β3 から追加された gmulcolor 命令と、ついでに sortval 命令を使用した表示深度のサンプルです。
zipにしておきましたので、ご参考までにどうぞ。

gmulcolor_test
; ---------------------------------------------------
; gmulcolor_test.hsp - gmulcolorと表示深度のサンプル
; COPYRIGHT (c) 2016 MIECATSOFT. ALL RIGHTS RESERVED.
; Version 1.0 [ 2016.03.15 ]
; ---------------------------------------------------
; 対応開発環境:HSP3.5β3以降
; ---------------------------------------------------

#include "hsp3dish.as"

	celload "test.png",1	// 画像ロード
	setcls 1,$000000		// redraw 0 でクリアする, 黒
	randomize				// 乱数初期化

	#const MAXCHR 50		// キャラクタ数
	;#const TMPMEM MAXCHR*4	// ソート用メモリサイズ(int)
	#const TMPMEM MAXCHR*8	// ソート用メモリサイズ(double)

	;dim tmp,MAXCHR			// ソート用メモリを確保(int)
	ddim tmp,MAXCHR			// ソート用メモリを確保(double)

	// 初期値をセット
	repeat MAXCHR
		x(cnt)=-100: y(cnt)=double(rnd(480)): s(cnt)=1.0: col(cnt)=0
	loop

*main

	// y座標を作業用メモリにコピーしてソート
	memcpy tmp,y,TMPMEM	// tmpにyを丸々コピー
	sortval tmp			// 小さい順でソート

	redraw 0: gmode 2	// 描画開始

	// キャラクタを処理
	repeat MAXCHR
		// ソート順を取得(変数iが処理対象の配列index)
		sortget i,cnt
		// 色を変える
		gmulcolor col(i)>>16&$ff,col(i)>>8&$ff,col(i)&$ff
		// 描画
		pos x(i),y(i): gcopy 1,(c*(1+s(i))\40>20)*96,0,96,128
		// y座標に速度分加える
		y(i)+=s(i)
		// y座標が画面外になったらリセット
		if y(i)>480 {
			x(i)=-64+rnd(352): y(i)=-128.0: s(i)=0.5+double(rnd(100))/50
			col(i)=(rnd(256)<<16)+(rnd(256)<<8)+rnd(256)	// $rrggbb
		}
	loop

	// debug
	pos 0,2: color 255,255,255
	mes "(C)2016 MIECATSOFT\n"+"SORTMEM:"+TMPMEM+" FRAME:"+c

	redraw 1			// 描画更新
	await 17-(c\3=0)	// 60FPS
	c++					// カウンタ
	goto *main



戻る

© 1998-2016 Miecat. All rights reserved.