トップページ > 記事閲覧
ステージを増やす方法
名前:RON 日時: 2015/01/26 00:20

昨日の件ありがとうございました。 本当でしたらもう一つ壁が出来まして…ぐに投稿することをお許しくださいm(_ _)m 切り替え時にステージを変える動作がありまして、そのためのマップテキストがたくさんあるのです・・・。 増やすコードを何度か試しているのですがなかなかうまくいかない状態です…。 管理人様が私のソースをもし持っているのなら どうしたらいいのかアドバイスをいただけたらと思います。 何度も管理人様を頼ってしまって申し訳ありません!
メンテ

Page: 1 |

Re: ステージを増やす方法 ( No.1 )
名前:管理人 日時:2015/01/27 00:50

すみません、ご質問させてください 「切り替え時にステージを変える動作」とは 「ステージの端まで到達したときに別のマップテキストに切り替える動作」のことでしょうか?
メンテ
Re: ステージを増やす方法 ( No.2 )
名前:RON 日時:2015/01/27 09:10

そうですね… 前回と似た質問になるのですが、 カービィ、メトロイド、マリオなどのマップがはありまして、左端まで進んだとき次のステージに切り替わるのですが、その為のマップテキストデータが沢山あるのです… 今の状態はvoidでステージ初期化を多く作っています。 実現したいのは 左端に行く→次のステージへ→左端に行く→次のステージへの繰り返しの予定なのです。あとメトロイド以外で縦のステージもあるのですがそこは切り替えで行こうかなと考えています!
メンテ
Re: ステージを増やす方法 ( No.3 )
名前:管理人 日時:2015/01/28 01:14

なんとなく分かってきました 毎度のことで申し訳ないのですが、現在の最新のファイルをメールで送っていただけないでしょうか? 頂いているプログラムでは g_stagedata.stagebunki も沢山のステージ初期化関数も無い状態なので、 適切なアドバイスができないと思います・・・ 因みに「左端に行く→次のステージへ→左端に行く→次のステージへの繰り返し」とのことですが、 それは例えば kongステージの場合、 kong → kong2 → kong3 と進んでいくということですよね?
メンテ
Re: ステージを増やす方法 ( No.4 )
名前:RON 日時:2015/01/28 09:43

メールの方、送りました 後程ご確認お願いします。 >因みに「左端に行く→次のステージへ→左端に行く→次のステージへの繰り返し」とのことですが、 それは例えば kongステージの場合、 kong → kong2 → kong3 と進んでいくということですよね? そうですね。kongのほうは使わない方針なんですけど…その手順で進めてます。^^;
メンテ
Re: ステージを増やす方法 ( No.5 )
名前:管理人 日時:2015/01/29 02:51

メールありがとうございます プログラムを拝見しました 既にこちらのように if(MAP_KRIBY == g_stagedata.changeflag){ if(g_stagedata.hero.x >= (g_stagedata.mapwidth - 1) * IMG_CHIPSIZE){ g_stagedata.hero.oldx = g_stagedata.hero.x; g_stagedata.hero.oldy = g_stagedata.hero.y; g_stagedata.oldscrollx = g_stagedata.scrollx; kriby_1(); } } 今居るマップを判定して切り替えるプログラムは組まれているのですね でしたら、こちらの部分を if(g_stagedata.hero.x >= (g_stagedata.mapwidth - 1) * IMG_CHIPSIZE){ g_stagedata.hero.oldx = g_stagedata.hero.x; g_stagedata.hero.oldy = g_stagedata.hero.y; g_stagedata.oldscrollx = g_stagedata.scrollx; kriby(); } if(g_stagedata.hero.x <= (g_stagedata.mapwidth == 0) * IMG_CHIPSIZE){ InitStage(); g_stagedata.hero.x = g_stagedata.hero.oldx; g_stagedata.hero.y = g_stagedata.hero.oldy; g_stagedata.scrollx = g_stagedata.oldscrollx; } if(MAP_KRIBY == g_stagedata.changeflag){ if(g_stagedata.hero.x >= (g_stagedata.mapwidth - 1) * IMG_CHIPSIZE){ g_stagedata.hero.oldx = g_stagedata.hero.x; g_stagedata.hero.oldy = g_stagedata.hero.y; g_stagedata.oldscrollx = g_stagedata.scrollx; kriby_1(); } } このようにして if(g_stagedata.hero.x >= (g_stagedata.mapwidth - 1) * IMG_CHIPSIZE){ g_stagedata.hero.oldx = g_stagedata.hero.x; g_stagedata.hero.oldy = g_stagedata.hero.y; g_stagedata.oldscrollx = g_stagedata.scrollx; if(MAP_KRIBY == g_stagedata.changeflag){ kriby_1(); } else{ kriby(); } } if(g_stagedata.hero.x <= (g_stagedata.mapwidth == 0) * IMG_CHIPSIZE){ InitStage(); g_stagedata.hero.x = g_stagedata.hero.oldx; g_stagedata.hero.y = g_stagedata.hero.oldy; g_stagedata.scrollx = g_stagedata.oldscrollx; } 更に、kriby関数の中に g_stagedata.changeflag = MAP_KRIBY; という行を増やせば最初の切り替わりのときにkribyが、2回目の切り替わりのときに kriby_1が実行されるようになりますので、よろしければお試しください あと、メールにマップに合わせてブロックデザインを変更することについてもお訊ねされていますが、 まずはこちらをクリアしてみてください
メンテ
Re: ステージを増やす方法 ( No.6 )
名前:RON 日時:2015/01/29 11:41

そちらのソースを試したところ、左に行ったときに順番通りに移動することが出来ました! あらたにステージ数を増やす場合は if(MAP_KRIBY == g_stagedata.changeflag){ kriby_1(); } else{ kriby(); } } の中に新しいif文を追加したら良いですか?
メンテ
Re: ステージを増やす方法 ( No.7 )
名前:管理人 日時:2015/01/30 00:59

はい あと define も追加する必要があります 仮に kriby_2, kriby_3 があるとしたら、 #define MAP_KRIBY 4 //カービィ2のマップ この部分に MAP_KRIBY_1, MAP_KRIBY_2 を追加します #define MAP_KRIBY 4 //カービィ2のマップ #define MAP_KRIBY_1 5 #define MAP_KRIBY_2 6 あと、 kriby_1 の中に g_stagedata.changeflag = MAP_KRIBY_1; を書き加え、 kriby_2 の中に g_stagedata.changeflag = MAP_KRIBY_2; を書き加えます その上で if 文を追加します if(MAP_KRIBY == g_stagedata.changeflag){ kriby_1(); } else if(MAP_KRIBY_1 == g_stagedata.changeflag){ kriby_2(); } else if(MAP_KRIBY_2 == g_stagedata.changeflag){ kriby_3(); } else{ kriby(); } if文の代わりに switch文を使っても良いです switch(g_stagedata.changeflag){ case MAP_KRIBY: kriby_1(); break; case MAP_KRIBY_1: kriby_2(); break; case MAP_KRIBY_2: kriby_3(); break; default: kriby(); break; } ( ここでは架空のkriby_2とkriby_3を例に出してご説明しましたが、 実際はRONさんの意図する関数をお使いください )
メンテ
Re: ステージを増やす方法 ( No.8 )
名前:RON 日時:2015/02/01 19:45

管理人様のソースを参考にしたところ 無事に数を増やすことが出来ました!ありがとうございます。
メンテ
Re: ステージを増やす方法 ( No.9 )
名前:RON 日時:2015/02/02 09:02

すみません、ブロックデザインは分岐時にswitch文の方で宣言すればいいのでしょうか?
メンテ
Re: ステージを増やす方法 ( No.10 )
名前:管理人 日時:2015/02/03 02:35

すみません、ブロックデザインをマップ毎に変更する件を失念していました m(_ _;m DrawMap関数のこちらの部分ですが switch (g_mapdata[y][x + sc]) { //カービィマップ1のブロック読み込み if (MAP_KR == g_stagedata.changeflag){ case '1': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k_block[0], TRUE); break; 〜〜 中略 〜〜 case '9': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k_block[8], TRUE); break; default: break; } //カービィマップ2のブロック読み込み switch (g_mapdata[y][x + sc]){ case '1': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k2_block[0], TRUE); break; 〜〜 中略 〜〜 case 'F': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k2_block[14], TRUE); break; default: break; } //モンスター検出 if (g_mapdata[y][x + sc] > 'Z') SetEnemy(x + sc, y); //Z(マップのブロック)以外の場合 } 正しくはこんな感じになります、ステージ毎に if文で分岐します( switch文でも OK ) if (MAP_KRIBY == g_stagedata.changeflag){ //カービィマップ1のブロック読み込み switch (g_mapdata[y][x + sc]) { case '1': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k_block[0], TRUE); break; 〜〜 中略 〜〜 case '9': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k_block[8], TRUE); break; default: break; } } else if (MAP_KRIBY2 == g_stagedata.changeflag){ //カービィマップ2のブロック読み込み switch (g_mapdata[y][x + sc]){ case '1': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k2_block[0], TRUE); break; 〜〜 中略 〜〜 case 'F': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k2_block[14], TRUE); break; default: break; } } else { //デフォルトではカービィマップ1を使用 switch (g_mapdata[y][x + sc]) { case '1': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k_block[0], TRUE); break; 〜〜 中略 〜〜 case '9': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k_block[8], TRUE); break; default: break; } } 対応するブロックデザインを増やしたい場合は if (MAP_KRIBY == g_stagedata.changeflag){ //カービィマップ1のブロック読み込み switch (g_mapdata[y][x + sc]) { case '1': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k_block[0], TRUE); break; 〜〜 中略 〜〜 case '9': DrawRotaGraph2(x * IMG_CHIPSIZE - shiftx, y * IMG_CHIPSIZE, 0, 0, 0.8, 0, g_imghandles.k_block[8], TRUE); break; default: break; } } else if ( 〜〜〜次のマップ用の条件式〜〜〜 ){ この括りの部分を増やして、MAP_KRIBY と k_block の部分を対応するマップ用のものに書き換えてください
メンテ
Re: ステージを増やす方法 ( No.11 )
名前:RON 日時:2015/02/04 15:22

管理人様 無事にマップを全部追加させて動かすことが出来ました。ありがとうございます! 管理人様のご丁寧なご返答大変感謝しております。 私はプログラマ志望ではないのですが、無駄になりません! 応援しています! 頑張ってください(^^)
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存