トップページ > 過去ログ > 記事閲覧
ロックマンゼロの様な3連斬りを…
名前:マイス 日時: 2008/08/03 13:26

はじめまして。 スミスと申します。 僭越ながらスレッドを立てさせて頂きました。 現在、「14歳から始めるC言語…」を使って2Dアクションゲームを製作しているのですが プレイヤーキャラの攻撃方法をロックマンゼロの様なボタン入力による3連斬りにしたい場合、どの様にすればいいでしょうか? どなたか教えて頂け ないでしょうか?

Page: 1 |

Re: ロックマンゼロの様な3連斬りを… ( No.1 )
名前:かたぱると 日時:2008/08/04 11:47

ゲームをしている際の操作感を条件で考えていくと プログラムに置き換えやすくなります。 Aボタンを攻撃ボタンとした場合に ・初段斬り ・二段目斬り ・三段目斬り という3つの技を連続で出したい場合の一例として、 以下の@〜Cの条件を満たすとそのような動作になります。 @攻撃を出していないときにAボタンを押した際に初段斬りが出る A初段斬りを出している最中にAボタンを押した場合、二段目斬りが出る B二段目斬りを出している最中にAボタンを押した場合、三段目斬りが出る C三段目斬りを出している最中にAボタンを押した場合には特に何もしない この条件を満たすプログラムを組む事を考えていけばとおのずと 出来るようになるはずです。 プログラムに最低必要な要素は ・キャラクターの状態(現在のアクション) ・Aボタンの入力状態判定 ・if文分岐(case文分岐でも可) といったところでしょうか。 以上を踏まえてプログラム化すれば出来ます。 また、これが正解! って答えでもないので 自分で考えてみてやりやすいようにしてみるといいと思います。 砕けて説明したつもりですが 一通り考えてみてそれでも判らなくなった場合には 遠慮なくご質問くだされ。
Re: ロックマンゼロの様な3連斬りを… ( No.2 )
名前:マイス 日時:2008/08/04 23:06

かたぱるとさん> つまり段階毎に受け付け時間を設定し、追加入力形式にしてみるのも一つの選択肢という訳ですね。 お答え頂き、ありがとうございます。 また何かわからなくなったらお手数ですが質問させて頂きますね。
Re: ロックマンゼロの様な3連斬りを… ( No.3 )
名前:マイス 日時:2008/08/10 16:44

また質問させて頂きます。 if文を使って『1秒以内にこのボタンが入力されたら次に移行』としようかと思ってるのですが制限時間を設定する方法がわかりません。 お手数ですが何卒ご教示下さいませんでしょうか。
Re: ロックマンゼロの様な3連斬りを… ( No.4 )
名前:かたぱると 日時:2008/08/11 21:33

参考程度にとりあえず一例をあげてみます。 尚、各種斬り行動の終了は考慮していませんので ご自分のプログラムに合わせて考えてみてください。 毎度お約束ですが『これが正解』という答えではないので ご自分で色々と改造したりしてみてくださいませ。 int inputCount = 0; // 受付タイマー。ループの前に用意して初期化をしておく。 ゲームループ { //-----------------先にタイマー処理----------------- // タイマー処理 if( inputCount > 0 ) // タイマーの残り時間があるか? { // タイマー減らす inputCount--; } //-----------------攻撃行動判定----------------- if(Aボタンが押された瞬間かどうか) // 押された瞬間かどうかを判断するのは考えてみてください { // 押された場合 bool isAttackUpdate = false; // 攻撃行動を更新するかどうかのフラグ if(既に攻撃中か?) { // 現在攻撃中 if(タイマーの残り時間があるか?) { // タイマー残りあり // 連続斬り入力成功 isAttackUpdate = true; } else { // タイマー残りなし // 連続斬り入力受付失敗。 } } else { // 現在攻撃中ではない // 初段の攻撃開始 isAttackUpdate = true; } //-----------------攻撃行動更新----------------- // 攻撃行動を更新 if( isAttackUpdate == true ) { // 攻撃のアクションを更新する switch( キャラクターの状態 ) { case 攻撃していない: // 初段斬りの行動開始。キャラクターの状態を更新すること // タイマーセット inputCount = 60; // 初段斬り〜2段目斬りの受付時間(フレーム) break; case 初段斬り中: // 2段目斬りの行動開始。キャラクターの状態を更新すること // タイマーセット inputCount = 60; // 2段目斬り〜3段目斬りの受付時間(フレーム) break; case 2段目斬り中: // 3段目斬りの行動開始。キャラクターの状態を更新すること // 4段目は無いので特にタイマーは設定しない inputCount = 0; break; } } } }
Re: ロックマンゼロの様な3連斬りを… ( No.5 )
名前:マイス 日時:2008/08/11 17:20

かたぱるとさん> おお、見やすくて非常にわかりやすいです! しかも自分自身で考えて上達出来る様に…! 本当にありがとうございます!
Re: ロックマンゼロの様な3連斬りを… ( No.6 )
名前:マイス 日時:2008/09/10 13:56

長い間、返信できず申し訳ありません。 添削をお願い致します。 int inputCount = 0; // 受付タイマー。ループの前に用意して初期化をしておく。 ゲームループ { //----先にタイマー処理---- // タイマー処理 if( inputCount < 0 ) // タイマーの残り時間があるか? { // タイマー減らす inputCount--; } //----攻撃行動判定---- if (key & PAD_INPUT_C) //Cボタンが押された瞬間かどうか { // 押された場合 bool isAttackUpdate = FALSE; // 攻撃行動を更新するかどうかのフラグ if ( (g_nowattack == TRUE) ) //既に攻撃中か? { // 現在攻撃中 if( inputCount < 0 ) // タイマーの残り時間があるか? { // タイマー残りあり // 連続斬り入力成功 isAttackUpdate = TRUE; } else { // タイマー残りなし // 連続斬り入力受付失敗。 isAttackUpdate = FALSE; } } else { // 現在攻撃中ではない // 初段の攻撃開始 isAttackUpdate = TRUE; } //----攻撃行動更新---- // 攻撃行動を更新 if( isAttackUpdate == TRUE ) { // 攻撃のアクションを更新する switch( g_nowattack == TRUE ) { case 0: // 初段斬りの行動開始。キャラクターの状態を更新すること isAttackUpdate == TRUE; // タイマーセット inputCount = 60; // 初段斬り〜2段目斬りの受付時間(フレーム) break; case 1: // 2段目斬りの行動開始。キャラクターの状態を更新すること isAttackUpdate == TRUE; // タイマーセット inputCount = 60; // 2段目斬り〜3段目斬りの受付時間(フレーム) break; case 2: // 3段目斬りの行動開始。キャラクターの状態を更新すること isAttackUpdate == TRUE; // タイマーセット inputCount = 0; // 受付時間(フレーム) break; } } } }
Re: ロックマンゼロの様な3連斬りを… ( No.7 )
名前:かたぱると 日時:2008/09/11 11:07

添削と言われましても張られたプログラムは 私が貼り付けたNo.4のものとほぼ変わっていないように見えますが・・・。 添削をするのであれば、必要な情報がそろっていないと突っ込みどころになってしまいます。 No.4の例は一例なのでそのままプログラムに直したとしても情報不十分の為に添削できません。 <簡単に見てもわからない部分> ・if (key & PAD_INPUT_C) のkeyって何? ・g_nowattack って何? ついでに // タイマー処理 if( inputCount < 0 ) の符号が逆です。 <細かい部分> bool型とBOOL型は混乱を避けるため分けたほうが良いです。 trueとTRUE、falseとFALSEも使い分けたほうが良いです。 とりあえずコンパイルが出来、 動作するプログラムまで作りこんでみてはいかがでしょうか。

Page: 1 |