BGスクロールのテスト
サンダーフォース風の全方向スクロールシューティングを作ろうと思い立ち、BGを使った背景のスクロールを調べることにした。
しかし、BGのことよりは、自機の回転表示の方が時間がかかったのであった。
このサンプル、もちろん60fpsで動くが、VSYNC 1を外すと、その10倍近い速さで動くことにびっくり。
'BGTEST VISIBLE 1,1,1,1,1,1 CLEAR CLS:COLOR 0 GPAGE 0:GCLS '--テイスウ-- SPD=2 '--BG ショキカ-- BGPAGE 0 BGCLIP 0,0,31,23 FOR Y=0 TO 23 FOR X= 0 TO 31 BNO=Y*32+X BGPUT 0,X ,Y ,BNO,9,0,0 BGPUT 0,X+32,Y ,BNO,9,0,0 BGPUT 0,X ,Y+24,BNO,9,0,0 BGPUT 0,X+32,Y+24,BNO,9,0,0 NEXT X NEXT Y '--SP ショキカ-- SPPAGE 0 SPCLR SPSET 0,288,11,0,0,0 SPSET 1,289,11,0,0,0 DIM SX(8,2),SY(8,2),SA(8,2) FOR I=0 TO 7 READ SX(I,0),SY(I,0),SA(I,0) READ SX(I,1),SY(I,1),SA(I,1) NEXT DATA 120, 88, 0,120,104, 0 DATA 128, 85, 45,117, 96, 45 DATA 136, 88, 90,120, 88, 90 DATA 139, 96, 135,128, 85,135 DATA 136,104,180,136, 88,180 DATA 128,107,225,139, 96,225 DATA 120,104, 270,136,104,270 DATA 117, 96,315,128,107,315 DI=0:DX=0:DY=-1*SPD BX=0:BY=0 DIM BD(11) FOR I=0 TO 10 READ BD(I) NEXT DATA -1,0,4,-1,6,7,5,-1,2,1,3 LOCATE 0,0:?"FPS:" TBGN=MAINCNTL LCNT=0 '--メイン ループ-- @LOOPMAIN GOSUB @CHKBTN GOSUB @DISPSHP GOSUB @SCRLBG LCNT=LCNT+1 EF=MAINCN-TBGN:EF=EF+(EF==0) FPS=FLOOR(LCNT/EF*600)/10 LOCATE 4,0:?FPS;" "; VSYNC 1 GOTO @LOOPMAIN @CHKBTN BTN=BUTTON() IF (BTN AND 15)==0 THEN RETURN DI=BD(BTN AND 15) DX=((-1)*(BTN AND 4)/4+(BTN AND 8)/8)*SPD DY=((-1)*(BTN AND 1 )+(BTN AND 2)/2)*SPD RETURN @DISPSHP SPOFS 0,SX(DI,0),SY(DI,0) SPANGLE 0,SA(DI,0) SPOFS 1,SX(DI,1),SY(DI,1) SPANGLE 1,SA(DI,1) RETURN @SCRLBG X=X+DX:Y=Y+DY IF X<0 THEN X=255 IF X>255 THEN X=0 IF Y<0 THEN Y=191 IF Y>192 THEN Y=0 BGOFS 0,X,Y RETURN