#const WAIT_TIME 3 // ウェイト[10ms]
#const SPEED 5 // 移動スピード
#const CHARACTER_SIZE 1 // キャラクタの描画サイズ
#const BLANK 100 // マップスクロールが始まる位置
x = 0 : y = ginfo_winy / 2 // キャラクタの位置
scrollX = 0 : scrollY = 0 // 画面左上のマップ上での位置(=スクロール量)
mapWidth = 300000 // マップの幅
buffer 1, mapWidth, ginfo_winy, SCREEN_NORMAL
// ★メインループ★
repeat
// 適当にマップを準備
gsel 1
color
if C\100 = 0 :pos C,ginfo_winy-(i)-50:mes C
//-----折れ線グラフ描画-----//
color 255
line C,ginfo_winy-(i),(C-1),ginfo_winy-(j)
color ,,255
boxf C-2,ginfo_winy-(i)-2,C+2,ginfo_winy-(i)+2
j=i
i=rnd(30)
c++
await 1
gsel 0
gosub *moveCharacter // キャラクタを動かす
gosub *setScroll // 描画する位置を決める
gosub *draw // いろんな描画処理
wait WAIT_TIME
loop
// キャラクタを動かす
*moveCharacter
stick key, 5 : speedX = SPEED * ((key >> 2 & 1) - (key & 1))
x = limit(x + speedX, 0, mapWidth)
return
// 描画する位置を決める
*setScroll
// (x - scrollX)が画面上でのキャラクタの位置になる
if x - scrollX < BLANK{
// キャラクタがBLANKより左側に移動した場合、カメラを移動させる
scrollX = limit(x - BLANK, 0, mapWidth - ginfo_winx)
}
if ginfo_winx - BLANK < x - scrollX {
// キャラクタが(ginfo_winx - BLANK)より右側に移動した場合、カメラを移動させる
scrollX = limit(x + BLANK - ginfo_winx, 0, mapWidth - ginfo_winx)
}
return
//いろんな描画処理
*draw
redraw 0
gosub *drawMap // マップを描画する
gosub *drawCharacter // キャラクタを描画する
redraw 1
return
// マップを描画する
*drawMap
pos 0, 0 : gcopy 1, scrollX, scrollY, ginfo_winx, ginfo_winy
return
// キャラクタを描画する
*drawCharacter
drawX = x - scrollX : drawY = y
boxf drawX - CHARACTER_SIZE,250, drawX + CHARACTER_SIZE,ginfo_winy
return
重いです、助けてください。
他のプログラムに組み込めるほど軽くしてください。