参考資料
§ 回転罠2(トラップ) §
複数のスプライトをSPLINKステートメントで連結して連動させる方法以外にも、個々のスプライトの表示位置を三角関数で求め、回転のアニメーションを実現する事が出来ます。三角関数は、ゲーム作成に必須の知識ですので、早目に習得して置く事を推奨します。
下記のプログラムでは、回転する罠(トラップ)を実現して居ます。キャラクタは、 ボタンで左右に動き、
ボタンでジャンプし、
ボタンでダッシュします。
ボタンで何度でも挑戦出来ます。終了するには、キーボード画面の STOP をタップして下さい。
0000001 | OPTION STRICT |
0000002 | ACLS |
0000003 | DIM I,J,B,X,Y,N,A,A1,A2,A3,D |
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,1346 |
0000021 | SPOFS 1,96,168 |
0000022 | SPANIM 1,"I",8,1347,8,1346,0 |
0000023 | SPSET 2,1346 |
0000024 | SPOFS 2,96,144 |
0000025 | SPANIM 2,"I",8,1347,8,1346,0 |
0000026 | SPSET 3,1346 |
0000027 | SPOFS 3,96,128 |
0000028 | SPANIM 3,"I",8,1347,8,1346,0 |
0000029 | |
0000030 | SPSET 4,1346 |
0000031 | SPOFS 4,192,168 |
0000032 | SPANIM 4,"I",8,1347,8,1346,0 |
0000033 | SPSET 5,1346 |
0000034 | SPOFS 5,192,144 |
0000035 | SPANIM 5,"I",8,1347,8,1346,0 |
0000036 | SPSET 6,1346 |
0000037 | SPOFS 6,192,128 |
0000038 | SPANIM 6,"I",8,1347,8,1346,0 |
0000039 | |
0000040 | SPSET 7,1346 |
0000041 | SPOFS 7,288,168 |
0000042 | SPANIM 7,"I",8,1347,8,1346,0 |
0000043 | SPSET 8,1346 |
0000044 | SPOFS 8,288,144 |
0000045 | SPANIM 8,"I",8,1347,8,1346,0 |
0000046 | SPSET 9,1346 |
0000047 | SPOFS 9,288,128 |
0000048 | SPANIM 9,"I",8,1347,8,1346,0 |
0000049 | |
0000050 | SPCOL 0 |
0000051 | SPCOL 1 : SPCOL 2 : SPCOL 3,4,4,4,4,,255 |
0000052 | SPCOL 4 : SPCOL 5 : SPCOL 6,4,4,4,4,,255 |
0000053 | SPCOL 7 : SPCOL 8 : SPCOL 9,4,4,4,4,,255 |
0000054 | |
0000055 | @START |
0000056 | X=0 : Y=192 : A1=0 : A2=90 : A3=180 : D=1 : N=0 |
0000057 | WHILE TRUE |
0000058 | B=BUTTON(0) |
0000059 | IF B AND 64 THEN BREAK |
0000060 | IF B AND 32 THEN |
0000061 | D=D*1.2 : IF D>5 THEN D=5 |
0000062 | ELSE |
0000063 | D=1 |
0000064 | ENDIF |
0000065 | IF B AND 4 THEN |
0000066 | DEC X,D : IF X<0 THEN X=0 |
0000067 | SPCHR 0,504+(N DIV 10) |
0000068 | END IF |
0000069 | IF B AND 8 THEN |
0000070 | INC X,D : IF X>383 THEN X=383 |
0000071 | SPCHR 0,496+(N DIV 10) |
0000072 | ENDIF |
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 | A=RAD(A1) |
0000078 | SPOFS 2,104+SIN(A)*16-8,168-COS(A)*16-8 |
0000079 | SPOFS 3,104+SIN(A)*32-8,168-COS(A)*32-8 |
0000080 | A=RAD(A2) |
0000081 | SPOFS 5,200+SIN(A)*16-8,168-COS(A)*16-8 |
0000082 | SPOFS 6,200+SIN(A)*32-8,168-COS(A)*32-8 |
0000083 | A=RAD(A3) |
0000084 | SPOFS 8,296+SIN(A)*16-8,168-COS(A)*16-8 |
0000085 | SPOFS 8,296+SIN(A)*32-8,168-COS(A)*32-8 |
0000086 | |
0000087 | SPOFS 0,X,Y |
0000088 | IF SPHITSP(0)>0 THEN BREAK |
0000089 | INC N : IF N>30 THEN N=0 |
0000090 | VSYNC 1 |
0000091 | WEND |
0000092 | LOCATE 18,10 : PRINT "PUSH A BUTTON!" |
0000093 | REPEAT |
0000094 | B=BUTTON(0) |
0000095 | UNTIL (B AND 16)>0 |
0000096 | CLS : GOTO @START |
0000097 |