
参考資料
§ 回転罠1(トラップ) §
スプライトのSPANIMステートメントで回転のアニメーションを設定する事が出来ます。併し、16×48のスプライトを回転させても、スプライト同士の衝突判定を行う範囲は、回転と共に移動する事は無く、思う様な結果は得られません。其処で、3個の16×16のスプライトをSPLINKステートメントで連結する必要が有ります。
下記のプログラムでは、回転する罠(トラップ)を実現して居ます。キャラクタは、
ボタンで上下左右に動き(上下は衝突位置確認用)、
ボタンでジャンプし、
ボタンでダッシュします。
ボタンで何度でも挑戦出来ます。終了するには、キーボード画面の STOP をタップして下さい。
| 0000001 | OPTION STRICT |
| 0000002 | ACLS |
| 0000003 | DIM I,J,B,X,Y,N,A1,A2,A3 |
| 0000004 | |
| 0000005 | GFILL 0,0,399,239,RGB(0,0,128) |
| 0000006 | |
| 0000007 | FOR I=0 TO 24 |
| 0000008 | BGPUT 0,I,13,614 |
| 0000009 | BGPUT 0,I,14,646 |
| 0000010 | NEXT |
| 0000011 | FOR I=6 TO 18 STEP 6 |
| 0000012 | FOR J=0 TO 10 |
| 0000013 | NGPUT 0,I,J,491 |
| 0000014 | NEXT |
| 0000015 | NEXT |
| 0000016 | |
| 0000017 | SPSET 0,496 |
| 0000018 | SPOFS 0,0,192 |
| 0000019 | |
| 0000020 | SPSET 1,1247 |
| 0000021 | SPOFS 1,104,160 |
| 0000022 | SPSET 2,1248 |
| 0000023 | SPOFS 2,16,0 |
| 0000024 | SPSET 3,1249 |
| 0000025 | SPOFS 3,32,0 |
| 0000026 | SPLINK 2,1 |
| 0000027 | SPLINK 3,1 |
| 0000028 | |
| 0000029 | SPSET 4,1247 |
| 0000030 | SPOFS 4,200,160 |
| 0000031 | SPSET 5,1248 |
| 0000032 | SPOFS 5,16,0 |
| 0000033 | SPSET 6,1249 |
| 0000034 | SPOFS 6,32,0 |
| 0000035 | SPLINK 5,4 |
| 0000036 | SPLINK 6,4 |
| 0000037 | |
| 0000038 | SPSET 7,1247 |
| 0000039 | SPOFS 7,296,160 |
| 0000040 | SPSET 8,1248 |
| 0000041 | SPOFS 8,16,0 |
| 0000042 | SPSET 9,1249 |
| 0000043 | SPOFS 9,32,0 |
| 0000044 | SPLINK 8,7 |
| 0000045 | SPLINK 9,7 |
| 0000046 | |
| 0000047 | SPCOL 0 |
| 0000048 | SPCOL 1 : SPCOL 2 : SPCOL 3 |
| 0000049 | SPCOL 4 : SPCOL 5 : SPCOL 6 |
| 0000050 | SPCOL 7 : SPCOL 8 : SPCOL 9 |
| 0000051 | |
| 0000052 | @START |
| 0000053 | X=0 : Y=192 : A1=0 : A2=90 : A3=180 : D=1 : N=0 |
| 0000054 | WHILE TRUE |
| 0000055 | B=BUTTON(0) |
| 0000056 | IF B AND 64 THEN BREAK |
| 0000057 | IF B AND 32 THEN |
| 0000058 | D=D*1.2 : IF D>5 THEN D=5 |
| 0000059 | ELSE |
| 0000060 | D=1 |
| 0000061 | ENDIF |
| 0000062 | IF B AND 4 THEN |
| 0000063 | DEC X,D : IF X<0 THEN X=0 |
| 0000064 | SPCHR 0,504+(N DIV 10) |
| 0000065 | END IF |
| 0000066 | IF B AND 8 THEN |
| 0000067 | INC X,D : IF X>383 THEN X=383 |
| 0000068 | SPCHR 0,496+(N DIV 10) |
| 0000069 | ENDIF |
| 0000070 | |
| 0000071 | IF B AND 1 THEN DEC Y |
| 0000072 | IF B AND 2 THEN INC Y |
| 0000073 | |
| 0000074 | INC A1 : IF A1>359 THEN A1=0 |
| 0000075 | INC A2 : IF A2>359 THEN A2=0 |
| 0000076 | INC A3 : IF A3>359 THEN A3=0 |
| 0000077 | SPROT 1,A1 |
| 0000078 | SPROT 2,A1 |
| 0000079 | SPROT 3,A1 |
| 0000080 | SPROT 4,A2 |
| 0000081 | SPROT 5,A2 |
| 0000082 | SPROT 6,A2 |
| 0000083 | SPROT 7,A3 |
| 0000084 | SPROT 8,A3 |
| 0000085 | SPROT 9,A3 |
| 0000086 | |
| 0000087 | SPOFS 0,X,Y |
| 0000088 | |
| 0000089 | IF SPHITSP(0)>0 THEN BREAK |
| 0000090 | INC N : IF N>30 THEN N=0 |
| 0000091 | VSYNC 1 |
| 0000092 | WEND |
| 0000093 | LOCATE 18,10 : PRINT "PUSH A BUTTON!" |
| 0000094 | REPEAT |
| 0000095 | B=BUTTON(0) |
| 0000096 | UNTIL (B AND 16)>0 |
| 0000097 | CLS : GOTO @START |
猶、下記では、衝突判定範囲が移動しない。
| 0000001 | OPTION STRICT |
| 0000002 | ACLS |
| 0000003 | DIM I,J,B,X,Y,N,A1,A2,A3 |
| 0000004 | |
| 0000005 | GFILL 0,0,399,239,RGB(0,0,128) |
| 0000006 | |
| 0000007 | FOR I=0 TO 24 |
| 0000008 | BGPUT 0,I,13,614 |
| 0000009 | BGPUT 0,I,14,646 |
| 0000010 | NEXT |
| 0000011 | FOR I=6 TO 18 STEP 6 |
| 0000012 | FOR J=0 TO 10 |
| 0000013 | NGPUT 0,I,J,491 |
| 0000014 | NEXT |
| 0000015 | NEXT |
| 0000016 | |
| 0000017 | SPSET 0,496 |
| 0000018 | SPOFS 0,0,192 |
| 0000019 | |
| 0000020 | SPSET 1,1250 |
| 0000021 | SPHOME 1,1,4 |
| 0000022 | SPOFS 1,104,160 |
| 0000023 | SPSET 2,1250 |
| 0000024 | SPHOME 2,1,4 |
| 0000025 | SPOFS 2,200,160 |
| 0000026 | SPSET 3,1250 |
| 0000027 | SPHOME 3,1,4 |
| 0000028 | SPOFS 3,296,160 |
| 0000029 | |
| 0000030 | SPCOL 0,TRUE : SPCOL 1,TRUE |
| 0000031 | SPCOL 2,TRUE : SPCOL 3,TRUE |
| 0000032 | |
| 0000033 | @START |
| 0000034 | X=0 : Y=192 : A1=0 : A2=90 : A3=180 : D=1 : N=0 |
| 0000035 | WHILE TRUE |
| 0000036 | B=BUTTON(0) |
| 0000037 | IF B AND 64 THEN BREAK |
| 0000038 | IF B AND 32 THEN |
| 0000039 | D=D*1.2 : IF D>5 THEN D=5 |
| 0000040 | ELSE |
| 0000041 | D=1 |
| 0000042 | ENDIF |
| 0000043 | IF B AND 4 THEN |
| 0000044 | DEC X,D : IF X<0 THEN X=0 |
| 0000045 | SPCHR 0,504+(N DIV 10) |
| 0000046 | END IF |
| 0000047 | IF B AND 8 THEN |
| 0000048 | INC X,D : IF X>383 THEN X=383 |
| 0000049 | SPCHR 0,496+(N DIV 10) |
| 0000050 | ENDIF |
| 0000051 | |
| 0000052 | IF B AND 1 THEN DEC Y |
| 0000053 | IF B AND 2 THEN INC Y |
| 0000054 | |
| 0000055 | INC A1 : IF A1>359 THEN A1=0 |
| 0000056 | INC A2 : IF A2>359 THEN A2=0 |
| 0000057 | INC A3 : IF A3>359 THEN A3=0 |
| 0000058 | SPROT 1,A1 |
| 0000059 | SPROT 2,A2 |
| 0000060 | SPROT 3,A3 |
| 0000061 | SPOFS 0,X,Y |
| 0000062 | IF SPHITSP(0)>0 THEN BREAK |
| 0000063 | INC N : IF N>30 THEN N=0 |
| 0000064 | VSYNC 1 |
| 0000065 | WEND |
| 0000066 | LOCATE 18,10 : PRINT "PUSH A BUTTON!" |
| 0000067 | REPEAT |
| 0000068 | B=BUTTON(0) |
| 0000069 | UNTIL (B AND 16)>0 |
| 0000070 | CLS : GOTO @START |