対戦型のSTGを作っています。
思い付きで弾をリロード式にしようと思い、やろうと思ったのですが、
Sleepや、Wait、while(GetNowCount() - スタート時刻 < 時間)ではゲーム自体が止まってしまいますよね?
そういうときはどのような処理をさせたらよいのでしょうか?
一応このような形で作っています。
Ammo = 弾数
アドバイスお願いします。
STGで弾をリロード式にする工夫をしているのですが・・・
Re: STGで弾をリロード式にする工夫をしているのですが・・・
ごく簡単に言うとwhileやめてif分でチェックだけするようにすればいい
後はゲームの仕様で切れたら自動とか幼いといけないとかで変わってくるのでコレだけだとなんともいえない
後はゲームの仕様で切れたら自動とか幼いといけないとかで変わってくるのでコレだけだとなんともいえない
C言語を使うと自分の足を誤って撃ち抜いてしまうことがある。 C++を使えばそのような間違いを犯しにくくなる。しかし、やってしまったときには足全体が無くなる。
Re: STGで弾をリロード式にする工夫をしているのですが・・・
リロード中フラグを用意して状態遷移します。
ウェイトは実時間ではなく、フレーム数をカウントするとかのゲーム内時間で処理することをお勧めします。
// ---------
bool reloading = false; // リロード中フラグ
// ---------
if(Ammo > 0){
if(keyInstance->GetInputKeyFrame(keyInstance->keyInput.P1shot) % 10 == 1){ //弾丸生成
creatBullet();
Ammo -= 1;
}
}
else {
if (!reloading) {
if(keyInstance->GetInputKeyFrame(keyInstance->keyInput.P1reload)){
reloading = true;
timer = GetNowCount();
}
}
else {
if (GetNowCount() - timer >= 3000){ //ここの処理で止まらないようにするためには?
reloading = false;
Ammo = 6;
}
}
}
Re: STGで弾をリロード式にする工夫をしているのですが・・・
仕様を書き忘れてました。申し訳ないです。
弾が6発で、
ショットボタンとリロードボタンに分けておいて、
とりあえず弾が0の時にリロードボタンを押すことでリロードとしています。
ただそれだとリロードボタンとショットボタンを連打するだけでリロードの意味がないため、
3秒のリロードタイムを設けることにしたのですが、
最初のとおりSleepや、Wait、while(GetNowCount() - スタート時刻 < 時間)ではゲームが止まってしまうのでどうしようかなといった状況です。
弾が6発で、
ショットボタンとリロードボタンに分けておいて、
とりあえず弾が0の時にリロードボタンを押すことでリロードとしています。
ただそれだとリロードボタンとショットボタンを連打するだけでリロードの意味がないため、
3秒のリロードタイムを設けることにしたのですが、
最初のとおりSleepや、Wait、while(GetNowCount() - スタート時刻 < 時間)ではゲームが止まってしまうのでどうしようかなといった状況です。
Re: STGで弾をリロード式にする工夫をしているのですが・・・
無事完成しました!
ISLeさんありがとうございました!
ISLeさんありがとうございました!
if(keyInstance->GetInputKeyFrame(keyInstance->keyInput.P1shot) % 10 == 1){ //弾丸生成
if(Ammo > 0){
creatBullet();
Ammo -= 1;
}
}else{
if(!Reloading){
if(keyInstance->GetInputKeyFrame(keyInstance->keyInput.P1reload)){
Reloading = true;
timer = GetNowCount();
}
}else{
if(GetNowCount() - timer >= 3000){
Reloading = false;
Ammo = 6;
}
}
}
Re: STGで弾をリロード式にする工夫をしているのですが・・・
全弾弾切れでなくてもリロードできるようにしたわけですね。
リロード中に弾を撃ててしまうようですけど想定内なのでしょうか。
ボタン押しっぱなしで一発撃ったら即リロードになってしまうのでリロード自体はペナルティとなりませんね。
ショットボタン押しっぱなしに対するペナルティにしかなっていないのでリロードという設定が不自然に感じます。
コードはメンテを考えるとショットの処理も状態遷移に合わせたほうが良いと思いますけど。
リロード中に弾を撃ててしまうようですけど想定内なのでしょうか。
ボタン押しっぱなしで一発撃ったら即リロードになってしまうのでリロード自体はペナルティとなりませんね。
ショットボタン押しっぱなしに対するペナルティにしかなっていないのでリロードという設定が不自然に感じます。
コードはメンテを考えるとショットの処理も状態遷移に合わせたほうが良いと思いますけど。