〜 グラフィック 〜
画像スクロール

表示する画像がウィンドウサイズより大きい場合に、スクロールさせるサンプルです。
十字キーによるスクロールの基本処理方法を載せていますので、
今まで、スクロール方法がわからなかった方々は覚えておくようにしましょう。
	
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
	zoom = 4          // 4倍サイズで表示
	speed = zoom * 10 // 1回の移動量…10ピクセル(ズーム後40ピクセル)
	cx = 0, -1        // 0:カレントポジションX, 1:前回のカレントポジションX
	cy = 0, -1        // 0:カレントポジションY, 1:前回のカレントポジションY
	buffer 1
	picload "sample/hspdx/hspdx.bmp"
	bx = winx : by = winy
	gsel 0
	repeat
		wait 3
		stick key, 15
		// 上下左右の押された方向へカレントポジションを移動(画像スクロール)
		if key & 1 : if cx - speed < 0 : cx = 0 : else : cx -= speed
		if key & 2 : if cy - speed < 0 : cy = 0 : else : cy -= speed
		if key & 4 : if cx + speed > (bx * zoom - winx) : cx = bx * zoom - winx : else : cx += speed
		if key & 8 : if cy + speed > (by * zoom - winy) : cy = by * zoom - winy : 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
		gzoom bx * zoom, by * zoom, 1, cx / zoom, cy / zoom, bx, by
		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
	zoom = 4          // 4倍サイズで表示
	speed = zoom * 10 // 1回の移動量…10ピクセル(ズーム後40ピクセル)
	cx = 0, -1        // 0:カレントポジションX, 1:前回のカレントポジションX
	cy = 0, -1        // 0:カレントポジションY, 1:前回のカレントポジションY
	buffer 1
	picload "sample/hspdx/hspdx.bmp"
	bx = ginfo_winx : by = ginfo_winy
	gsel 0
	repeat
		wait 3
		stick key, 15
		// 上下左右の押された方向へカレントポジションを移動(画像スクロール)
		if key & 1 : if cx - speed < 0 : cx = 0 : else : cx -= speed
		if key & 2 : if cy - speed < 0 : cy = 0 : else : cy -= speed
		if key & 4 : if cx + speed > bx * zoom - ginfo_winx : cx = bx * zoom - ginfo_winx : else : cx += speed
		if key & 8 : if cy + speed > by * zoom - ginfo_winy : cy = by * zoom - ginfo_winy : 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
		gzoom bx * zoom, by * zoom, 1, cx / zoom, cy / zoom, bx, by
		redraw 1
	loop