〜 グラフィック 〜
継ぎ目なく無限スクロール

背景スクロール型ゲームにおいて、どれだけ進んでも同じ背景を延々と表示する場合のサンプルです。
十字キーによるスクロールの基本処理方法のみを載せていますので、
今まで、スクロール方法がわからなかった方々は覚えておくようにしましょう。
尚、下記のサンプルは縦スクロールのみ(HSP2)、横スクロールのみ(HSP3)となっています。
本来の背景サイズに、初期表示画面内容を末端に付け加えて、継ぎ目を見えないようにしていますが、
この方法で縦横同時にスクロール出来るようにすると、無駄なスペースが出来てしまいます。
コチラで紹介している方法で行うと、はみだした部分は反対側の情報を自動補完しますので、
バッファに継ぎ目補正用のスペースを確保する必要がなくなります。参考にどうぞ。
	
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
	speed = 30 // 1回の移動量…30ピクセル
	gx = 640   // 画像Xサイズ
	gy = 1000  // 画像Yサイズ
	cx = 0, -1 // 0:カレントポジションX, 1:前回のカレントポジションX
	cy = 0, -1 // 0:カレントポジションY, 1:前回のカレントポジションY
	buffer 2, , gy + winy
	randomize
	boxf : color 255, 255, 255
	repeat 1000
		rnd x, gx : rnd y, gy
		pset x, y
	loop
	pos 0, gy : gcopy 2, , , gx, winy - gy // 画面終端に先端のウィンドウサイズ(1画面)分を貼り付ける
	gsel 0
	repeat
		wait 3
		stick key, 15
		if key & 2 : if cy - speed < 0 : cy = gy - speed : else : cy -= speed
		if key & 8 : if cy + speed > gy : cy = speed : else : cy += speed
		// 前回と同じ位置ならば、再描画しない
		if cx.0 = cx.1 & (cy.0 = cy.1) : continue
		cx.1 = cx.0 : cy.1 = cy.0 : draw++
		title "描画回数:" + draw + " 描画基点(" +  cx+ ", " + cy + ")"
		redraw 0
		gcopy 2, cx, cy, winx, winy
		redraw 1
	loop
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
	speed = 30 // 1回の移動量…30ピクセル
	gx = 1000  // 画像Xサイズ
	gy = 480   // 画像Yサイズ
	cx = 0, -1 // 0:カレントポジションX, 1:前回のカレントポジションX
	cy = 0, -1 // 0:カレントポジションY, 1:前回のカレントポジションY
	buffer 1, gx + ginfo_winx, gy
	randomize
	boxf
	repeat 1000
		if cnt \ 100 = 0 : color rnd(150) + 105, rnd(150) + 105, rnd(150) + 105
		pset rnd(gx), rnd(gy)
	loop
	pos gx : gcopy 1, , , ginfo_winx - gx, gy // 画面終端に先端のウィンドウサイズ(1画面)分を貼り付ける
	gsel 0
	repeat
		wait 3
		stick key, 15
		if key & 1 : if cx - speed < 0 : cx = gx - speed : else : cx -= speed
		if key & 4 : if cx + speed > gx : cx = speed : else : cx += speed
		// 前回と同じ位置ならば、再描画しない
		if cx.0 = cx.1 & cy.0 = cy.1 : continue
		cx.1 = cx.0 : cy.1 = cy.0 : draw++
		title "描画回数:" + draw + " 描画基点(" +  cx+ ", " + cy + ")"
		redraw 0
		gcopy 1, cx, cy, ginfo_winx, ginfo_winy
		redraw 1
	loop