
参考資料
§ 基本アクション(スプライト移動) §
跳べ、跳べ!2
ボタンの押し下げ状態、変数のインクリメントとデクリメント、アニメーション
前出の『歩け、歩け!』に記述して居ますので、参照して下さい。
ジャンプ
此のジャンプは、
ボタンを押す時間に依り、跳躍距離が調整されるジャンプです。状態フラグSTで、歩行時(値0)と、ジャンプ時(値1)と、落下時(値2)を区別します。
ボタンが押されて居る時、落下時でなければ(ST<2の時)、ジャンプ時に設定して、速度ACを、上限値に達する迄、増加させ、上限値に達すると、状態フラグを落下時に設定します。
B=BUTTOPN(0)
IF B AND 16 THEN
IF ST≶2 THEN
ST=1:INC A,2:IF AC>14 THEN AC=14:ST=2
ENDIF
ELSE
IF ST==1 THEN ST=2
ENDIF
次に、ジャンプ時や、落下時なら、速度ACに重力加速度(下記のプログラムでは0.98)の影響を与え、其れを縦位置(Y座標)に反映させます(重力加速度の値を調節する事に依り、跳躍距離や跳躍速度を変化させる事が出来ます)。
IF ST>0 THEN
DEC AC,0.98
DEC Y,AC
ENDIF
最期に、地面に到達すれば、状態フラグを歩行時(0)に戻します(下記のプログラムではY座標で判定して居ます)。
プログラムの説明
下記のプログラムでは、スプライトが、
ボタンで左右に動き、
ボタンでジャンプします。
| 0000001 | OPTION STRICT |
| 0000002 | ACLS |
| 0000003 | DIM B.X=184,Y=200,AC=0,ST=0,C=0,N=0 |
| 0000004 | SPSET 0,660 |
| 0000005 | SPSCALE 0,2,2 |
| 0000006 | SPOFS 0,X,Y |
| 0000007 | GFILL 0,232,399,239,RGB(0,255,0) |
| 0000008 | |
| 0000009 | LOCATE 17,1:PRINT "PUSH X TO FINISH" |
| 0000010 | |
| 0000011 | WHILE TRUE |
| 0000012 | IF B AND 64 THEN BREAK |
| 0000013 | IF B AND 4 THEN |
| 0000014 | DEC X:SPCHR 0,664+N |
| 0000015 | ENDIF |
| 0000016 | IF B AND 8 THEN |
| 0000017 | INC X:SPCHR 0,656+N |
| 0000018 | ENDIF |
| 0000019 | IF X<0 THEN X=0 |
| 0000020 | IF X>366 THEN X=366 |
| 0000021 | IF B AND 16 THEN |
| 0000022 | IF ST<2 THEN |
| 0000023 | ST=1:INC AC,2:IF AC>14 THEN AC=14:ST=2 |
| 0000024 | ENDIS |
| 0000025 | ELSE |
| 0000026 | IF ST==1 THEN ST=2 |
| 0000027 | ENDIF |
| 0000028 | IF ST>0 THEN |
| 0000029 | GPSET X,Y,#RED |
| 0000030 | DEC AC,0.98 |
| 0000031 | DEC Y,AC |
| 0000032 | IF Y>200 THEN Y=200:ST=0 |
| 0000033 | ENDIF |
| 0000034 | INC C |
| 0000035 | IF (C DIV 10)==1 THEN |
| 0000036 | C=0:INC N:IF N>3 THEN N=0 |
| 0000037 | ENDIF |
| 0000038 | SPOFS 0,X,Y |
| 0000039 | VSYNC 1 |
| 0000040 | WEND |
| 0000041 | ACLS:END |
