〜 グラフィック 〜
画面を揺らす

ゲームや映像のエフェクトとして、描画している内容を上下左右に揺らすサンプルです。
サンプルモジュールの仕様としてgcopy命令同様の使用する元バッファID、基点座標、サイズに加え、
揺らす方向、揺らす回数、揺れの大きさ、揺れの速度をパラメータ指定するようにしています。
詳しくは、各パラメータの意味やサンプルスクリプトを実際に動かして検証してください。
尚、一回の揺れは横方向の場合「左に震度分ずれ、中央に戻り、右に震度分ずれ、中央に戻る」となります。
よって、速度が最小の10ミリ秒の場合は、1回の揺れに40ミリ秒掛かる計算となります。
	

quake 読込先バッファ, X座標, Y座標, 横幅, 高さ, 方向, 回数, 震度, 速度
読込先バッファコピーするウィンドウIDを指定する
X座標コピーする画像の基点X座標指定する
Y座標コピーする画像の基点Y座標指定する
横幅コピーするX方向のサイズを指定する
高さコピーするY方向のサイズを指定する
方向揺らす方向を指定する(0:横 1:縦)
速度揺れる速度(wait命令と同じ10ミリ秒単位)を指定する
但し、最小速度1(10ミリ秒)でも上記補足説明の通り、1回の揺れで40ミリ秒掛かる

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#module
#deffunc quake int, val, int, int, int, int, int
	mref id, 0 : mref area, 49 : mref dir, 2 : mref rep, 3 : mref size, 4 : mref sp, 5
	i = 0, -size, 0, size
	gcopy id, area.0, area.1, area.2, area.3
	repeat rep * 4 + 1
		redraw 0
		count = cnt \ 4
		gcopy id, (dir = 0) * i.count + area.0, (dir = 1) * i.count + area.1, area.2, area.3
		redraw 1
		wait 1
	loop
	return
#global

	buffer 2
	picload "sample/hspdx/hspdx.bmp"
	area = 0, 0, winx, winy
	gsel 0
	quake 2, area, 0, 20, 10, 3 // 強さ10速度3で20回横揺れ
	wait 100
	quake 2, area, 1, 30,  5, 1 // 強さ5速度1で30回縦揺れ
	stop

quake 読込先バッファ, X座標, Y座標, 横幅, 高さ, 方向, 回数, 震度, 速度
読込先バッファコピーするウィンドウIDを指定する
X座標コピーする画像の基点X座標指定する
Y座標コピーする画像の基点Y座標指定する
横幅コピーするX方向のサイズを指定する
高さコピーするY方向のサイズを指定する
方向揺らす方向を指定する(0:横 1:縦)
速度揺れる速度(wait命令と同じ10ミリ秒単位)を指定する
但し、最小速度1(10ミリ秒)でも上記補足説明の通り、1回の揺れで40ミリ秒掛かる

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#module
#deffunc quake int id, int px, int py, int sx, int sy, int dir, int rep, int size, int sp, local i
	i = 0, -size, 0, size
	repeat rep * 4 + 1
		redraw 0
		gcopy id, (dir = 0) * i(cnt \ 4) + px, (dir = 1) * i(cnt \ 4) + py, sx, sy
		redraw 1
		wait (sp < 1) + (sp > 0) * sp
	loop
	return
#global

	buffer 1
	picload "sample/hspdx/hspdx.bmp"
	gsel 0
	quake 1, , , ginfo_winx, ginfo_winy, 0, 20, 10, 3 // 強さ10速度3で20回横揺れ
	wait 100
	quake 1, , , ginfo_winx, ginfo_winy, 1, 30,  5, 1 // 強さ5速度1で30回縦揺れ