トピック
bはかせ kojimadaiti

弾の処理

コンソールで横シューを作ろうとして とりあえず弾を発射するところは できました。 (少し挙動がおかしかったりしますが) しかし、画面外に出てしまった弾の 処理に困りました。 一応画面から出ないように座標を設定 していたら、一見普通に動いている ように見えて、 画面端に弾がどんどん蓄積していくので 多すぎると画面がチカチカしてくるんです。 いろいろ試みたんですが かえって表示がおかしくなってしまったり。 誰か教えて下さひ 公開キー【KAJJ46D】
0そうだね
プレイ済み
返信[1]
親投稿
bはかせ kojimadaiti
自機( э ←こんなの)の前に表示 されている数字は打った弾の数です。 今回初めて配列変数を扱ったので ちょっと処理に手間取りますね… いや、自分のプログラムのせいか…
0そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
これはいわゆる「処理落ち」です。 動作が重くなって1フレーム以内に処理が完了しない場合にこうなります。 なぜ、そんなに重いかというと今まで撃った弾を毎回すべて表示しているためです。 画面外に出た弾の数が変数SZに入っているので FOR I=SZ TO S-1 とすれば高速化に繋がるだけではなく無駄に多くの配列を確保する必要も無くなると思います。 あとプチコンのFOR~NEXTは(きざみ値が正数の場合)終了値の方が開始値より小さくなっているとループ内は実行されないためIF S==0 THEN BREAKという処理は無くても問題ありません。 それから発射と移動のボタンの同時押しができないとか弾の先頭のY座標は前回発射したY座標になっているのも気になりましたが、これが仕様でないならば頑張って改善してみてください。
3そうだね
プレイ済み
返信[3]
親投稿
bはかせ kojimadaiti
アドバイスありがとうございます。 なるほど…!! ループ変数に弾が画面外に出た数を 加えればよかったのか…!! ここ最近ないくらい納得しました。 そしてできました! 弾の出る位置がおかしいのも修正しました。 そしてこれをメインのプログラムに 組み込まないといけないんですね…
0そうだね
プレイ済み
返信[4]
親投稿
GRS grs8001
コンソールでもスプライトでも結構使う処理のサンプル (スプライトの方が少しラクです) KEY:[43EX34T3] BEAM発射処理と移動処理をもっと明確に分けて 使っていない配列を再利用するだけで良くなりますよ~ ポイントは ・Aボタンを押すとBEAMをセットするだけ ・発射しているBEAMだけ移動する 先ずは実行し雰囲気をつかんでからプログラムを読んでみて下さい。 プログラムの何処がわからない(解りにくい)かコメント下さい ※リアルタイムで返答は出来ないので気長にお待ち下さい \(^o^)/ (あっ、解決してたのか…)
1そうだね
プレイ済み
返信[5]
親投稿
GRS grs8001
BX[50]、BY[50]でBEEMの座標保存 (現状では50個用意すれば十分) BX[]の座標が -1 の場合 発射していないとする ・28行~ BEEMを発射判定処理 ------------ 発射していないBEEMを探してBEEMの座標をセットするだけ 34行 BREAK は、1個だけセットすればよいので FOR-NEXTのループ終了する (ここでBREAKを抜くと全部同じ座標でBEAMでセットされるので試されたし) ・41行~ BEAMを1個ずつ移動する処理 ----- BEAMを右へ移動させているだけ 配列変数の0~49に座標データを記憶させているので FOR-NEXTで1つずく確認します
2そうだね
プレイ済み
返信[6]
親投稿
GRS grs8001
但し、発射していない場合は処理を飛ばす BX[5]=-1 の場合は処理を中断してBX[6]を確認する それと、BEAMが画面の外に出た場合、BX[I]を未発射にする CONTINUE実行すると47行に飛ぶので"-"が表示されない (CONTINUEを抜くとLOCATE 50.* になるので Out of range エラーになるよ)
1そうだね
プレイ済み
返信[7]
親投稿
GRS grs8001
FOR-NEXT と CONTINUE の使い方 (内蔵HELPの補足) FOR I=0 TO 5 IF I=3 THEN CONTINUE ? I NEXT 実行すると 0 1 2 4 5 CONTINUE を実行すると NEXT まで強制的に処理を飛ばします (だから、3が表示されない)
2そうだね
プレイ済み
返信[8]
親投稿
bはかせ kojimadaiti
分かりやすいサンプルプログラムと解説 ありがとうございます。 しっかり理解できました。 自分が組んでいたプログラムより 圧倒的に無駄が少なくて驚きました。 弾の座標を入れる配列も50個で 充分だったんですね。自分は20万…ゴホン MIN、MAXを使って座標を制限したり データの入っていない配列を検索したりと 色々な方法を使っていて 勉強になりました。
1そうだね
プレイ済み
返信[9]
親投稿
bはかせ kojimadaiti
今回教えてもらったアドバイスとプログラムを メインのプログラムに組み込んでみると 思い通りに動きました! ありがとうございました! (一応まだ開けておきます)
0そうだね
プレイ済み