プレイ日記
『プチコン3号』を買ってはみたけど、どこから手をつけたらいいかわからない方むけに、ふと思い立って、このプログラムについて、1行1行作りながら説明してみたいと思います。
10そうだね
プレイ済み
返信[1]
親投稿
SPSET 0,2 -------------------- まずはこの1行だけ。2番目の数字をいろいろ変えてみて、[START]で結果を確かめましょう。
0そうだね
プレイ済み
返信[2]
親投稿
SPSET 0,2 SPOFS 0,150,50 -------- 説明を忘れていました。 1行目:スプライト番号0を、キャラクタ番号2(さくらんぼ)にする。 2行目:スプライト番号0(さくらんぼが入っている)の表示する位置を、左から150、上から50の位置にする。 2行目の2つめ、3つめの数字をいろいろ変えてみましょう。
0そうだね
プレイ済み
返信[3]
親投稿
SPSET 0,2 X=150:Y=50 SPOFS 0,X,Y -------- SPOFSの2番目と3番目の数字を変えれば、スプライトが動かせそうな感じです。そこで(変数の)XとYに数字を入れます。結果は同じですが、ここからはXとYをいろいろ変えればスプライトが動かせそうです。
0そうだね
プレイ済み
返信[4]
親投稿
SPSET 0,2 X=150:Y=50 SPOFS 0,X,Y WHILE 1 WEND -------- 見なれないかもしれませんが、「WHILE 1」と「WEND」を作ります。この中では命令がずーっとくり返されます。
0そうだね
プレイ済み
返信[5]
親投稿
SPSET 0,2 X=150:Y=50 SPOFS 0,X,Y WHILE 1 PRINT "BAKA" WEND -------- ためしにPRINT文で確かめましょう。ずっと文字が表示されますね。
0そうだね
プレイ済み
返信[6]
親投稿
SPSET 0,2 X=150:Y=50 SPOFS 0,X,Y WHILE 1 PRINT "BAKA"; WEND -------- PRINT文のうしろに「;」(セミコロン)を打つと、文字が横にならびます。これで「WHILE 1」から「WEND」の間がずっとくり返されることが理解できましたか。
0そうだね
プレイ済み
返信[7]
親投稿
ACLS SPSET 0,2 X=150:Y=50 WHILE 1 SPOFS 0,X,Y WEND -------- 1行目は、最初に画面を全部消す命令です。SPOFSを「WHILE〜WEND」の中に入れたことで、何回も命令が実行されますが、XとYの値が変わっていないので、スプライトは動きません。
0そうだね
プレイ済み
返信[8]
親投稿
ACLS SPSET 0,2 X=150:Y=50 WHILE 1 STICK OUT SX,SY X=X+SX SPOFS 0,X,Y WEND -------- STICKは、その時のアナログスティックのヨコとタテの具合を、ここではSXとSYに入れます。 次の行で「新しいXの値は、これまでのXの値にSXを足したもの」として、新しいXの値を代入します。 試しにアナログスティックを「ゆっくり」操作してみましょう。すぐにスプライトが画面の外に飛んでいきます。
0そうだね
プレイ済み
返信[9]
親投稿
ACLS SPSET 0,2 X=150:Y=50 WHILE 1 STICK OUT SX,SY X=X+SX SPOFS 0,X,Y VSYNC WEND -------- スプライトが画面の外に飛んでいったのは、「WHILE〜WEND」の中がとてつもなく多く実行されたからです。(1秒に何百回とか何千回) そこで、VSYNCを書き足して1秒間に60回(3DSが1秒間に画面を書きかえる速さと同じ)くらいまでくり返される回数を減らします。 これで移動のスピードはおそくなりましたが、こんどはおそくなりすぎてしまいました。
0そうだね
プレイ済み
返信[10]
親投稿
ACLS SPSET 0,2 X=150:Y=50 WHILE 1 STICK OUT SX,SY X=X+SX*5 SPOFS 0,X,Y VSYNC WEND -------- そこで、Xに対して移動する量を設定していたSXをふやします。 この例では5倍にしています。数字をいろいろ変えてみて、自分の好きな倍数にしてみましょう。
0そうだね
プレイ済み
返信[11]
親投稿
ACLS SPSET 0,2 X=150:Y=50 WHILE 1 STICK OUT SX,SY X=X+SX*5 Y=Y-SY*5 SPOFS 0,X,Y VSYNC WEND -------- ヨコ移動が完成したら、タテ移動についてもやってみましょう。 SYの手前がマイナスである点に注意。 STICK命令で入るタテ方向のアナログスティックは、上方向でプラス、下方向でマイナス。これ対して表示画面では上方向がマイナス、下方向がプラスなので、SYの手前をマイナスにする必要があります。
0そうだね
プレイ済み
返信[12]
親投稿
ACLS SPSET 0,2 X=150:Y=50 WHILE 1 STICK OUT SX,SY X=X+SX*5 Y=Y-SY*5 IF X<0 THEN X=0 SPOFS 0,X,Y VSYNC WEND -------- このままではまだキャラクターが画面の外に飛び出てしまうので、画面の上下左右に、カベを作ってスプライトが画面の外に飛び出ないようにします。まずは画面の左側から。 「もしも(IF)、Xが0よりも小さい(X<0)ならば(THEN)、Xを0にしなさい(X=0)」 という意味です。 もし手前のXの計算でXが0よりも小さくなったとしても、Xを0にもどしてくれるので、ぜったいにスプライトは左側からはみ出ることはありません。左側にカベが出来たのと同じことになります。
0そうだね
プレイ済み
返信[13]
親投稿
ACLS SPSET 0,2 X=150:Y=50 WHILE 1 STICK OUT SX,SY X=X+SX*5 Y=Y-SY*5 IF X<0 THEN X=0 IF X>384 THEN X=384 IF Y<0 THEN Y=0 IF Y>224 THEN Y=224 SPOFS 0,X,Y VSYNC WEND -------- ここまでわかれば、残りの3行も同じようにわかるのではないでしょうか。右、上、下にも同じようにカベを作ります。これで完成です。
0そうだね
プレイ済み