
参考資料
§ 移動物搭乗 §
移動する物の上に乗り、一緒に移動するには、SPHITSPステートメントでスプライト同士の衝突判定を行い、SPHITINFOステートメントで衝突時の情報を取得し、キャラクタの表示座標を調整する事で実現出来ます。
下記のプログラムでは、回転する罠(トラップ)を実現して居ます。キャラクタは、
ボタンで左右に動き、
ボタンでジャンプします。終了するには、キーボード画面の STOP をタップして下さい。
| 0000001 | OPTION STRICT |
| 0000002 | ACLS |
| 0000003 | DIM I,B,X,Y,A,S,N,M |
| 0000004 | DIM T,X1,Y1,X2,Y2 |
| 0000005 | DIM H,F0,D0,R0 |
| 0000006 | |
| 0000007 | FOR I=0 TO 24 |
| 0000008 | BGPUT 0,I,13,614 |
| 0000009 | BGPUT 0,I,14,678 |
| 0000010 | NEXT |
| 0000011 | |
| 0000012 | SPSET 0,1104 |
| 0000013 | SPOFS 0,10,192 |
| 0000014 | |
| 0000015 | SPSET 1,1250 |
| 0000016 | SPOFS 1,100,160 |
| 0000017 | |
| 0000018 | SPCOL 0 : SPCOL 1 |
| 0000019 | |
| 0000020 | X=10 : Y=192 : S=0 : A=0 |
| 0000021 | F0=160 : D0=-1 : R0=0 |
| 0000022 | WHILE TRUE |
| 0000023 | B=BUTTON(0) |
| 0000024 | IF B AND 4 THEN |
| 0000025 | R0=0 : DEC X : IF X<0 THEN X=0 |
| 0000026 | ENDIF |
| 0000027 | IF B AND 8 THEN |
| 0000028 | R0=0 : INC X : IF X>383 THEN X=383 |
| 0000029 | ENDIF |
| 0000030 | IF S==0 && (B AND 16)>0 THEN |
| 0000031 | R0=0 : S=1 : A=12 |
| 0000032 | ENDIF |
| 0000033 | IF S==1 THEN |
| 0000034 | DEC A,0.98 |
| 0000035 | DEC Y,A |
| 0000036 | ELSE |
| 0000037 | N=BGGET(0,X,Y+16,1) |
| 0000038 | M=BGGET(0,X+15,Y+16,1) |
| 0000039 | IF N==0 && M==0 THEN |
| 0000040 | INC Y,3 |
| 0000041 | ENDIF |
| 0000042 | ENDIF |
| 0000043 | IF Y>192 THEN Y=192 : S=0 |
| 0000044 | |
| 0000045 | INC F0,D0 : IF F0>160 || F0<0 THEN D0=D*-1 |
| 0000046 | IF R0==1 THEN Y=F0-14 |
| 0000047 | |
| 0000048 | SPOFS 0,X,Y |
| 0000049 | SPOFS 1,100,F0 |
| 0000050 | |
| 0000051 | H=SPHITSP(0) |
| 0000052 | IF H==1 THEN |
| 0000053 | SPHITINFO OUT T,X1,Y1,X2,Y2 |
| 0000054 | IF Y<Y2 THEN |
| 0000055 | Y=Y2-14 : S=0 : R0=1 |
| 0000056 | ENDIF |
| 0000057 | ELSE |
| 0000058 | R0=0 |
| 0000059 | ENDIF |
| 0000060 | |
| 0000061 | VSYNC 1 |
| 0000062 | WEND |