スプライトのテストプログラム
日経ソフトウェア2011.6月号掲載のプチコンの記事に、スプライトのサンプルプログラムがあるので、これを改造してみた。
たくさんの星(100個まで可)が画面をくるくる回りながら飛び回る。
今回のキモは、通常のスプライトではできない、中心角からの回転を擬似的に再現していること。
SPANGLEを使うと、スプライトの左上の角を中心に回転してしまうため、スプライトの表示位置がずれてしまう。
このプログラムでもSPANGLEを使って回転を行っているが、表示位置がずれる分を計算して求め、その分を補正して(ほぼ)正しい位置に表示されるようにしている。
'PRG:SPTEST2 '┏━━━━━━┓ '┃ スプライト テスト ┃ '┗━━━━━━┛ @DECLARE CLEAR MX=15:'スターコスウ DIM SX(MX+1):'スターX DIM SY(MX+1):'スターY DIM SR(MX+1):'スターカイテンカク DIM SS(MX+1):'スタージョウタイ DIM SC(MX+1):'スターカラーパレット DIM ADX(360):'カイテンホセイテーブルX DIM ADY(360):'カイテンホセイテーブルY @CONSTANT _RSPD=2:'カイテンソクド(オオキイホドハヤイ) @INIT CLS:SPCLR:GCLS GOSUB @TBL_INIT GOSUB @SP_INIT VISIBLE 1,1,1,1,1,1 GOTO @MAINLOOP @TBL_INIT S=8*SQR(2) FOR I=0 TO 359 ADX(I)=SIN(-2*PI()*(I-45)/360)*S ADY(I)=COS(-2*PI()*(I-45)/360)*S NEXT RETURN @SP_INIT FOR I=0 TO MX SC(I)=RND(16) SPSET I,156,SC(I),0,0,0 SX(I)=RND(255):SY(I)=RND(191) SR(I)=0:SS(I)=RND(8) SPOFS I,SX(I),SY(I) 'SPANIM I,4,8,0 NEXT RETURN @MAINLOOP GOSUB @STARMOVE GOSUB @STARROLL GOTO @MAINLOOP 'GOTO @EXIT @STARMOVE FOR I=0 TO MX DX=(SS(I) AND 1)*2-1 DY=(SS(I) AND 2)-1 SX(I)=SX(I)+DX SY(I)=SY(I)+DY IF SX(I)<8 THEN SS(I)=SS(I) OR 1 IF SX(I)>247 THEN SS(I)=SS(I) AND 6 IF SY(I)<8 THEN SS(I)=SS(I) OR 2 IF SY(I)>183 THEN SS(I)=SS(I) AND 5 SPOFS I,SX(I)-ADX(SR(I)),SY-ADY(SR(I)) NEXT RETURN @STARROLL FOR I=0 TO MX T=((SS(I) AND 4)-2)/2 SR(I)=(SR(I)+_RSPD*T+360)%360 SPANGLE I,SR(I) NEXT RETURN @EXIT END