プレイ日記
簡単なアクションゲームを制作中。 操作キャラクターから弾を出すにはどうすればいいですか?
4そうだね
プレイ済み
返信[1]
親投稿
基本的には、 1 弾を出すタイミング(ボタン押されたとき?)に弾を出す処理をする 2 弾を出す処理は、弾用に割り当てたスプライト管理番号(空いている番号)にSPSETなどで弾を表示する。初期位置は発射元の座標と同じにする(SPOFS) 3 弾が表示されている間(SPUSEDなどでスプライトが使用されているかなどで判断する方法もある)は、弾を動かす処理をする。 弾を動かす処理は線形的な移動であればSPANIMなどを利用してアニメーションさせることも出来る。そうでない場合は、メインループの中で毎フレーム弾の座標を移動させるような処理にする。 という感じが基本かと思います。
0そうだね
プレイ済み
返信[2]
親投稿
ありがとうございます。 弾の処理の仕方がよく分からないのですが、そこはどうすればいいですか?
0そうだね
プレイ済み
返信[3]
親投稿
すみません。間違えました。 弾を出すタイミングのことです。
0そうだね
プレイ済み
返信[4]
親投稿
現在のプログラムがどうなってるかわからないので正確な事がわからないんですが、メインループがあると思うので、その中で例えばAボタンを押した時なら、 IF BUTTON(2)==#A THEN 'この中でボタンを登場させる処理をいれる ENDIF みたいな感じです。 今どうなってるのかがわかればもう少し正確に書けますが、そんな感じですね。
0そうだね
プレイ済み
返信[5]
親投稿
とりあえずボタンを押すと弾を表示することが出来るようになりました。ありがとうございます! ですがまだ、弾をとばすことが出来ないのですが、どうすればいいですか?
0そうだね
プレイ済み
返信[6]
親投稿
弾を出せたと言うことは1〜2が出来た感じですね。 なので後は3が出来ればいいことになります。SPANIMを使う方法もありますが、とりあえず自分の力(メインループ)で動かす方法(基礎)を知っておいた方がいいとも思ったので、その方がいいですね。 メインループというのはWHILE〜WENDやGOTOなどで一定の範囲を無限ループさせている部分です。 その部分で弾の座標を動かせば弾が飛ぶ(動く)事になります。 例えば弾がスプライト管理番号2番だった場合、 IF SPUSED(2) THEN SPOFS 2 OUT X,Y X=X+4 SPOFS 2,X,Y IF X > 400 THEN SPCLR 2 ENDIF みたいな感じのをメインループの間に入れれば弾が出ている間は右に動くような感じになります。(あくまで例なので自分のに合わせて調整が必要)
0そうだね
プレイ済み
返信[7]
親投稿
なかなかうまくいきません。 なんとか弾を動かすことができました。 (でもループの仕方が分からない…) 画像は現在の弾などのプログラムです
0そうだね
プレイ済み
返信[8]
親投稿
メインループというのは、画面のプログラムだとWHILE TRUEからこの画面には映ってませんが下の方にあるはずのWENDまでの事ですね。なので、この間に弾の動作の処理を入れれば良い事になります。 プログラムを見た感じ、Yボタンを押している間しか処理されない感じになってるんで、弾が飛んでいかないんじゃないかと思います。なので実際は、弾を出す(ボタンを押した時)と弾が動く(常に)は、別に処理する必要があります。 あと47,48行目にあるIFは意味が無いですよ。46行目でボタンが押されているか判定しているので、押された時はENDIFまでの47〜49行目が実行されます。#Yは0ではないのでIF #Y THENとしても必ず実行される行にはなりますが意味は無いです。 と言うことで、 1:弾を出す(ボタンを押した時)と 2:弾を動かす は別々に考えてみてください。
0そうだね
プレイ済み
返信[9]
親投稿
やっばり表示することができても弾を常に動かすことができません。 スプライト自体を常に動かすにはどうすればいいですか?
0そうだね
プレイ済み
返信[10]
親投稿
そうですね〜。まず43行目のIF #Y THENは不要なので、その行は、 SPSET 2,1346:SPOFS 2,X+10,Y にしちゃった方がいいですね。 その上で46行にどう書けばいいのかですが、まず弾を動かすのは弾(スプライト管理番号2)が出ているときですよね? なので、その時だけ処理される部分(IF)を作ります。 そしてその内容ですが、弾の位置を移動させることです。ただこの時に、もし画面外に出てしまった場合、ちゃんと弾を消しておいた方がいいですよね。と言うことで、これを素直にプログラムしてみると、 IF SPUSED(2) THEN SPOFS 2 OUT TX,TY TX=TX+4 SPOFS 2, TX, TY IF TX>400 THEN SPCLR 2 ENDIF みたいな感じになります。まずここまでわかりますか?
0そうだね
プレイ済み
返信[11]
親投稿
弾を動かすことができました! ありがとうございます!
0そうだね
プレイ済み
返信[12]
親投稿
出来たようで良かったです。 内容もしっかり理解する事が大事なので、何故そうなるのかわからないというような事があればちゃんと質問した方がいいと思いますし、質問しないまでも自分でもしっかりと流れや内容を理解出来るように心がけてくださいね。 これからも頑張ってください!
0そうだね
プレイ済み