ショットの実装について
ショットの実装について
ナムコの「バトルシティ」のような2Dアクションゲームを制作しています。
プログラミング初心者で、ゲームプログラミングの館の項目24「4方向移動~2D~」に項目26のショット「シューティングの基本」のプログラムを実装したいのですが、キャラクターが動かなくなったりしてうまくいきません。
24項目に26項目のプログラムの組み方を教えてくれませんか?
上記の図のように4方向に弾を飛ばすことを現在実装しています。
プログラミング初心者で、ゲームプログラミングの館の項目24「4方向移動~2D~」に項目26のショット「シューティングの基本」のプログラムを実装したいのですが、キャラクターが動かなくなったりしてうまくいきません。
24項目に26項目のプログラムの組み方を教えてくれませんか?
上記の図のように4方向に弾を飛ばすことを現在実装しています。
Re:ショットの実装について
24項目までのソースコードの一行一行の意味は、どのぐらい理解できていますか?
それと例えば歩く処理の中で実際にキャラクタの座標を変えているのはどの部分でしょうか?
私の質問の答えと今現在のうまく動かないソースコードを見せてくださいね。
それと例えば歩く処理の中で実際にキャラクタの座標を変えているのはどの部分でしょうか?
私の質問の答えと今現在のうまく動かないソースコードを見せてくださいね。
Re:ショットの実装について
>>zwiさんへ
キャラクタの座標を変化させる部分の答えを掲示します。
歩くフラグ(ch.walking_flag)が立っているかつ各キー入力のいづれかでch.mukiを動かすと、変数の値が増減してキャラを動かすことができる。
if(ch.walking_flag==1){ //歩くフラグが立っていたら //1P
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y=ch.y-2;
else if(ch.muki==1) //左向きならch.x座標を減らす
ch.x=ch.x-2;
else if(ch.muki==2) //下向きならch.y座標を増やす
ch.y=ch.y+2;
else if(ch.muki==3) //右向きならch.x座標を増やす
ch.x=ch.x+2;
}
キャラクタの座標を変化させる部分の答えを掲示します。
歩くフラグ(ch.walking_flag)が立っているかつ各キー入力のいづれかでch.mukiを動かすと、変数の値が増減してキャラを動かすことができる。
if(ch.walking_flag==1){ //歩くフラグが立っていたら //1P
if (ch.muki==0) //上向きならch.y座標を減らす
ch.y=ch.y-2;
else if(ch.muki==1) //左向きならch.x座標を減らす
ch.x=ch.x-2;
else if(ch.muki==2) //下向きならch.y座標を増やす
ch.y=ch.y+2;
else if(ch.muki==3) //右向きならch.x座標を増やす
ch.x=ch.x+2;
}
Re:ショットの実装について
zwi改め、softyaです。
そこまで理解されているのであれば、KEY_INPUT_RETURNで弾が発射される時にch.xとch.yをtama.xとyにコピーするだけです。
そのとき、tama構造体にもmukiを持たせてキャラの向きをコピーするようにしてください。
で、26章では上方向しか弾の処理がありませんので、tama構造体のmukiに合わせて4方向の処理を作ります。
よろしいでしょうか?ソースを見せていただければ、もう少し具体的な説明が出来たのですが。
そこまで理解されているのであれば、KEY_INPUT_RETURNで弾が発射される時にch.xとch.yをtama.xとyにコピーするだけです。
そのとき、tama構造体にもmukiを持たせてキャラの向きをコピーするようにしてください。
で、26章では上方向しか弾の処理がありませんので、tama構造体のmukiに合わせて4方向の処理を作ります。
よろしいでしょうか?ソースを見せていただければ、もう少し具体的な説明が出来たのですが。
Re:ショットの実装について
ソース見ましたけで、弾が下から発射されるだけで、自キャラには何も問題ないはずですけど。
ためしに、弾関係を
#if 0
#endif
でコメントアウトして問題が再現するか試してみてください。
デバッグの基本中の基本ワザです。
で少しずつ弾処理のコードを有効にしていって問題点が再現する場所を見つけましょう。
ためしに、弾関係を
#if 0
#endif
でコメントアウトして問題が再現するか試してみてください。
デバッグの基本中の基本ワザです。
で少しずつ弾処理のコードを有効にしていって問題点が再現する場所を見つけましょう。
Re:ショットの実装について
>>softyaさん
実行すると、方向キーどちらか押した状態でエンターで弾を撃つとキャラの動きが止まります。押し続けると、キャラも弾に化けます。
実行すると、方向キーどちらか押した状態でエンターで弾を撃つとキャラの動きが止まります。押し続けると、キャラも弾に化けます。
Re:ショットの実装について
ごめんなさい。DOCファイルから取り出したらタブが乱れてしまいました。
今度からtxtファイルで添付してくださいね。
で、下記のコメントアウト状態でも同じですか?
これでENTERキーの影響があるはず無いんですが。
今度からtxtファイルで添付してくださいね。
で、下記のコメントアウト状態でも同じですか?
#if 0 if(counter<5) //前にエンターを押してから5カウント未満なら counter++; //カウントアップ else if( Key[ KEY_INPUT_RETURN ] == 1 ){//5カウント以上たっていたら counter=0; //カウンターを戻す for(i=0;i<10;i++){ if(tama.flag==0){ //発射していない玉を探し、 tama.flag=1; //発射フラグを立てる break; } } } for(i=0;i<10;i++){ if(tama.flag==1){ //発射している玉なら tama.y-=4; //座標を8減らす DrawGraph( tama.x , tama.y , image2[1] , TRUE );//玉を描画 if(tama.y < -32){ //もし画面外まで来たら tama.y=ch.y; //初期値に戻し、 tama.x=ch.x; //初期値に戻し、 tama.flag=0; //発射フラグを戻す } } } #endif
これでENTERキーの影響があるはず無いんですが。
Re:ショットの実装について
>>softyaさん
わかりました。今後プログラムは、txtファイルで添付します。A^_^;)
ショットのコードを上記の文に置き換えましたら、キャラが正常に動きました(^_^)。
わかりました。今後プログラムは、txtファイルで添付します。A^_^;)
ショットのコードを上記の文に置き換えましたら、キャラが正常に動きました(^_^)。
Re:ショットの実装について
今朝ソースを見たら問題点に気づきました。
tamaの配列が、
struct shot tama[2];
と宣言されているのに使うときは、
for(i=0;i<10;i++){
と配列を添え字が9まで参照したり変更してますよね。
つまり、配列外のメモリを参照したり破壊したりしてます。
なので異常が起きているんですが、異常終了しなかったのが不思議なくらいです。
struct shot tama[10];
に戻して置いてください。
あとは、前に書いた事に注意して組み直してもらえば弾がちゃんと飛ぶはずです。
tamaの配列が、
struct shot tama[2];
と宣言されているのに使うときは、
for(i=0;i<10;i++){
と配列を添え字が9まで参照したり変更してますよね。
つまり、配列外のメモリを参照したり破壊したりしてます。
なので異常が起きているんですが、異常終了しなかったのが不思議なくらいです。
struct shot tama[10];
に戻して置いてください。
あとは、前に書いた事に注意して組み直してもらえば弾がちゃんと飛ぶはずです。
Re:ショットの実装について
>>softyaさん
ありがとうございます。
昼間アクセスできなかったので、今返信書きました。
tama[10]に直したましたら、移動中でもしっかり打てました。
ありがとうございます。
昼間アクセスできなかったので、今返信書きました。
tama[10]に直したましたら、移動中でもしっかり打てました。
Re:ショットの実装について
>>softyaさん
弾が4方向に飛ぶようになりました。^_^b
しかし、右と下にショットを撃つと初期化されません。
もう一度プログラムを見てもらってもいいですか?
弾が4方向に飛ぶようになりました。^_^b
しかし、右と下にショットを撃つと初期化されません。
もう一度プログラムを見てもらってもいいですか?
Re:ショットの実装について
if(tama.y < 32){
if(tama.x < 32){
は
if(tama.y > 480){
if(tama.x > 640){
ではないでしょうか?
if(tama.x < 32){
は
if(tama.y > 480){
if(tama.x > 640){
ではないでしょうか?
Re:ショットの実装について
>>みなさん
本当ありがとうございます。 ^_^b
4方向しっかり弾が初期化され、ショットが完全実装できました。
また何かありましたら、よろしくおねがいします。m(__)m
本当ありがとうございます。 ^_^b
4方向しっかり弾が初期化され、ショットが完全実装できました。
また何かありましたら、よろしくおねがいします。m(__)m