〜 ウィンドウ 〜
ウィンドウ内のみを初期化

ウィンドウ内でアニメーションさせる時、描画領域を繰り返しクリアする必要がありますが、
画面内がチラついてしまう問題に悩んでいる人を多く見かけます。
この問題の多くはFAQで紹介した「初期化命令でredrawのフラグをも初期化している」ことが原因です。
cls命令は背景色を指定して画面内を初期化してくれるので利用してしまいがちですが、
この命令は画面内以外のあらゆる設定をも初期化してしまう命令であり、
ウィンドウ全体を初期化するのは画面内のみをクリアする頻度に比べ圧倒的に少ないことと思いますし、
初期化はscreen命令でも出来る上、screen命令の方が全体の初期化っぽい感じが出ています。
そこで「cls命令を画面内の描画領域のみを初期化する命令に変えてしまおう」というのが今回の内容です。

下記のサンプル命令ではcls命令と互換性があり、色指定パラメータはそのまま残してあります。
また、新たに付けた第2パラメータを指定することでオブジェクトはそのまま残せるようにもしています。
	

cls クリアカラー番号, オブジェクト保持フラグ
クリアカラー番号クリアする色番号(0:白 1:明るい灰色 2:灰色 3:暗い灰色 4:黒)を指定する
オブジェクト保持フラグ配置オブジェクトも削除する(=0)かそのまま残す(=1)かを指定する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#undef cls
#module
#deffunc cls int, int
	mref col, 0 : mref objflg, 1
	repeat 3 : i.cnt = (4 - col) * 64 - (col = 0) : loop
	if objflg = 0 : clrobj
	color i.0, i.1, i.2 : boxf : color
	return
#global

	sdim col, 16, 5
	sdim obj, 16, 2
	col = "白", "明るい灰色", "灰色", "暗い灰色", "黒"
	obj = "削除", "そのまま"
	repeat 10
		c = cnt \ 5
		o = cnt / 5
		button "ダミー", *dummy
		cls c, o
		dialog "クリア色\t" + col.c + "\nオブジェクト\t" + obj.o, , "cls " + c + ", " + o
	loop

*dummy

cls クリアカラー番号, オブジェクト保持フラグ
クリアカラー番号クリアする色番号(0:白 1:明るい灰色 2:灰色 3:暗い灰色 4:黒)を指定する
オブジェクト保持フラグ配置オブジェクトも削除する(=0)かそのまま残す(=1)かを指定する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#undef cls
#module
#deffunc cls int col, int objflg, local i
	repeat 3 : i.cnt = (4 - col) * 64 - (col = 0) : loop
	if objflg = 0 : clrobj
	color i.0, i.1, i.2 : boxf : color
	return
#global

	col = "白", "明るい灰色", "灰色", "暗い灰色", "黒"
	obj = "削除", "そのまま"
	repeat 10
		button gosub "ダミー", *dummy
		cls cnt \ 5, cnt / 5
		dialog "クリア色\t" + col(cnt \ 5) + "\nオブジェクト\t" + obj(cnt / 5), , "cls " + (cnt \ 5) + ", " + (cnt / 5)
	loop
	end

*dummy
	return