ページ 11

連射

Posted: 2013年10月04日(金) 13:58
by yy1995113
C言語の館で敵のショットのプログラムを参考にさせていただいたものです。
水平方向ばら撒きショットについてなのですが、指定した弾の数は出るのですが、連射させることがどうしてもうまくいきません。
教えてもらえないでしょうか?

Re: 連射

Posted: 2013年10月04日(金) 16:14
by ISLe
指定した弾の数は出るということは、ショットボタンが押されたらばら撒きショットを一工程行うことは既にできているということですね。

その一工程のあいだに新たにショットボタンが押されたら、続けてもう一工程繰り返すようにすると連射になります。
一工程のあいだに何回ショットボタンを押されても、もう一工程繰り返すだけです。
ばら撒きショットは一定時間自動連射ですので、いわゆるセミオートマショットです。

ショットボタンの連射速度によってショットの発射間隔を短くしたいのであれば、もうひと工夫必要です。

Re: 連射

Posted: 2013年10月11日(金) 15:47
by yy1995113
返信遅れて大変申し訳ございません。
考えた結果このままいくことにしました。質問しておきながら申し訳ありません。

そして、本当に不躾で申し訳ないのですが、もう一つ質問があります。最初に敵はYのマイナス方向に進み、敵があるY座標に到達したらその場にとどまり、弾を打つ。弾が画面外に出たらまたYのマイナス方向に移動し、画面外に出たらその敵フラグが下りる、という風にやりたいのです。しかし、止まって球を打つまではうまくいくのですが、再びYのマイナス方向に移動するというのがどうしてもできません。どうすればいいのでしょうか?

ソースを張っておきます。見にくかったらすいません。よろしくお願いします。

//移動ルーチン
{
if(enemy->Flag4==true)
{
enemy->eY-=7;

for(int i=0;i<EShotNum2;i++)
{
if(enemy->eY<50)//もしY座標50に到達したら
{
enemy->eY=50;//止まる
EnemyShot2(enemy,Player,enemy->EShot); //水平ショットを打つ
}

if(EShot2.Y==500||EShot2.X==700)//水平ショットが画面外に出たら
{
enemy->eY-=7;//-7進む
}
}

}
}
}

Re: 連射

Posted: 2013年10月11日(金) 17:41
by nil
ショットが固定速ならば
時間経過で再び上に進むようにすれば良いと思います。

Re: 連射

Posted: 2013年10月11日(金) 17:48
by ISLe
水平ショットが画面外に出たらというのは、変化であって状態ではありません。
進み続けるようにするには状態を変化させ維持する仕組みが必要です。

状態変化について知りたかったら新しくトピックを立ててください。

Re: 連射

Posted: 2013年10月13日(日) 00:12
by yy1995113
一応時間経過でやるようにしましたがなかなかうまくいきません。
もう心がおれそうです。自分で解決ができなくて悔しくて仕方がありません。

ソースを張るのでみてもらえないでしょうか?
本当に申し訳ありません。

//移動ルーチン
{
if(enemy->Flag4==true)
{
enemy->eY-=7;

if(enemy->eY<50)//もしY座標50に到達したら
{
enemy->eY=50;//止まる
EnemyShot2(enemy,Player,enemy->EShot); //水平ショットを打つ
}

enemy->enemyCounter++;//秒数をプラス

if(enemy->enemyCounter==120)//フレームが120になったら
{
enemy->eY-=7;
}
}
}

Re: 連射 (初めの質問と違うよね?)

Posted: 2013年10月13日(日) 08:36
by へにっくす
タイトルが「連射」なのですが
今の質問は「連射」じゃないよね。
ISLeさんの投稿見てないのですか?

ちなみに掲示されたソースではうまく動かないのは当然です。

知りたければ
いったんここは解決にして
新しく投稿してください。