トップページ > 記事閲覧
マップ切り替え
名前:RON 日時: 2015/01/06 16:33

また、お世話になります。 横移動したときにマップを切り替えるというソースを作っているのですが、どうしても初期位置とステージが飛んでしまうのです。 homepage2.nifty.com/natupaji/DxLib/program/MapScroll3.cpp このサイト参考にして作っているのですが、いまだに分からない状態です。 もしよろしければ、教えて頂けないでしょうか?
メンテ

Page: 1 |

Re: マップ切り替え ( No.1 )
名前:管理人 日時:2015/01/07 00:05

うーん、お書き込みのご説明では何が原因か分かりません RONさんが作成された「マップを切り替えるときに初期位置とステージが飛んでしまう」という プログラムをこちらに貼り付けて頂けないでしょうか? > もしよろしければ、教えて頂けないでしょうか? ふと思ったのですが、何を教えて差し上げれば良いのでしょうか? RONさんが作成されたプログラムが正常に動かない原因を突き止めれば良いのではないのでしょうか?
メンテ
Re: マップ切り替え ( No.2 )
名前:RON 日時:2015/01/07 08:22

申し訳ありません。 雑になってしまい、 void InitStage(){ char buf[256]; //マップファイル格納 //デバッグマップの読み込み sprintf_s(buf, 256, "media\\stage\\kriby\\map1.txt", g_stagedata.stagenum + 1); int fh = FileRead_open(buf); //ファイルを開く for (int y = 0; y < MAP_HEIGHT; y++){ FileRead_gets(g_mapdata[y], 256, fh); //マップデータに変換 } FileRead_close(fh); g_stagedata.mapwidth = (int)strlen(g_mapdata[0]); //実際のマップの長さ //キャラの初期位置 g_stagedata.hero.x = 5 * IMG_CHIPSIZE; g_stagedata.hero.y = 8 * IMG_CHIPSIZE; if(g_stagedata.hero.x >= (g_stagedata.mapwidth - 1) * IMG_CHIPSIZE){ g_stagedata.hero.oldy = g_stagedata.hero.y; } g_stagedata.hero.turn = FALSE; //向き g_stagedata.hero.life = 100; //生命力 ZeroMemory(g_stagedata.enemies, sizeof(g_stagedata.enemies)); ZeroMemory(g_stagedata.shots, sizeof(g_stagedata.shots)); g_stagedata.scrollx = 0; } void kriby(){ char buf[256]; //マップファイル格納 sprintf_s(buf, 256, "media\\stage\\kriby\\map2.txt", g_stagedata.stagenum + 1); int fh = FileRead_open(buf); //ファイルを開く for (int y = 0; y < MAP_HEIGHT; y++){ FileRead_gets(g_mapdata[y], 256, fh); //マップデータに変換 } FileRead_close(fh); g_stagedata.mapwidth = (int)strlen(g_mapdata[0]); //実際のマップの長さ //キャラの初期位置 g_stagedata.hero.oldx = g_stagedata.hero.x * IMG_CHIPSIZE; ZeroMemory(g_stagedata.enemies, sizeof(g_stagedata.enemies)); ZeroMemory(g_stagedata.shots, sizeof(g_stagedata.shots)); g_stagedata.scrollx = 0; } void GameMain(){ //アニメーションカウンタ g_stagedata.animcounter++; g_stagedata.animcounter &= MAXINT; //負の数にならないようにする処理 int ac = g_stagedata.animcounter / ANIM_RATE; DrawMap(); DrawHero(); //操作キャラの動作 DrawEnemy(ac); if(MAP_METROID == 1){ if(g_stagedata.hero.x >= (g_stagedata.mapwidth - 1) * IMG_CHIPSIZE){ InitStage(); kriby(); } if(g_stagedata.hero.x <= (g_stagedata.mapwidth == 0) * IMG_CHIPSIZE){ InitStage(); } //if (g_stagedata.hero.y <= (0 - IMG_CHIPSIZE)){ // if(g_stagedata.hero.jumppower >= 0 ){ // g_stagedata.hero.jumppower = 600.0f; //ジャンプして移動したときにジャンプ力を次のステージまで記憶する // g_stagedata.hero.x = g_stagedata.hero.oldx * IMG_CHIPSIZE; // metrold(); // } //} //if(g_stagedata.hero.y >= (MAP_HEIGHT * IMG_CHIPSIZE)){ // g_stagedata.hero.x = g_stagedata.hero.oldx * IMG_CHIPSIZE; // metrold_1(); //} } //ゲームクリア判定 //if (g_stagedata.hero.x >= (g_stagedata.mapwidth - 1) * IMG_CHIPSIZE){ // g_gamestate = GAME_CLEAR; // g_timerstart = g_lasttime; //タイマーセット //} } 最初のステージが端まで行ったとき、座標を次のステージまで記憶させると考えていますが、なかなか記憶までできずにいます。
メンテ
Re: マップ切り替え ( No.3 )
名前:Will 日時:2015/01/07 14:39

> if(g_stagedata.hero.x <= (g_stagedata.mapwidth == 0) * IMG_CHIPSIZE){ 全体は見ていませんが計算式に条件文が出てくる時点で理解に苦しむコードです。 それぞれの条件を日本語で書き表して、コードがそれと一致しているかどうか見なおしてみると良いかと思います。
メンテ
Re: マップ切り替え ( No.4 )
名前:管理人 日時:2015/01/08 00:30

プログラムの一部分ではなく、全体を貼り付けていただくことは可能でしょうか? もしプログラムが長くて難しいということでしたら、メールでこちら BQE00322(あっとまーく)nifty.com ( (あっとまーく)を@に置き換えてください ) に送ってください m(_ _)m 前回のスレッドでも申し上げましたが、手元で実行して 「マップを切り替えるときに初期位置とステージが飛んでしまう」現象を拝見しないと 的確なアドバイスをするのは難しそうです・・・
メンテ
Re: マップ切り替え ( No.5 )
名前:RON 日時:2015/01/08 07:08

メールの方をただいま送りました。 後程確認お願いします。
メンテ
Re: マップ切り替え ( No.6 )
名前:管理人 日時:2015/01/09 00:08

ありがとうございます、メールを拝見しました プログラムを動かして、ステージの最後まで到達したところ最初の位置に戻りました 特に問題が無いように感じるのですが・・・ 本来どうなるべきで、現在はどうなってしまっているのかを教えて頂けないでしょうか?
メンテ
Re: マップ切り替え ( No.7 )
名前:RON 日時:2015/01/09 09:13

本来は別なマップもあるのですが、一方通行にステージに行くのではなく、前に行ったステージに戻る予定もあるのです。ただ、今の状態だとその前のステージの初期位置に戻ってしまうのです。 私の考えは、最初はその初期位置でスタートして、戻るときに、座標を記憶させて、前のステージに座標の数値を入れようと考えているのですが可能でしょうか?
メンテ
Re: マップ切り替え ( No.8 )
名前:管理人 日時:2015/01/10 02:31

> 本来は別なマップもあるのですが、一方通行にステージに行くのではなく、前に行ったステージに戻る予定もあるのです。 > ただ、今の状態だとその前のステージの初期位置に戻ってしまうのです。 とりあえず「『別のステージに行って、前のステージに戻れる』という処理を行っているはずが、前のステージの初期位置に戻ってしまう」という状態のプログラムをいただけないでしょうか? 送っていただいたプログラムではマップが一つしかないので、「頂いたプログラムは正常に動いています」としか申し上げられません・・・ > 私の考えは、最初はその初期位置でスタートして、戻るときに、座標を記憶させて、前のステージに座標の数値を入れようと考えているのですが可能でしょうか? はい、ステージが切り替わる前のプレイヤーの座標を記憶して、前のステージに戻ったときに記憶しておいた座標にプレイヤーを移動させるという処理を行うことは可能です
メンテ
Re: マップ切り替え ( No.9 )
名前:RON 日時:2015/01/13 08:53

再度メールの方送らせていただきました。 ご確認のほどお願いしますm(_ _)m
メンテ
Re: マップ切り替え ( No.10 )
名前:管理人 日時:2015/01/14 00:53

すみません、メールが届いていないようです 添付して頂いたファイルのサイズが容量オーバーになってしまった可能性がありますので、 容量が大きく、且つ無くても問題の無いファイルである chap5.sdf と、 無くてもこちらでビルドすれば作成される Release フォルダを削除した状態で zip ファイルを作成してみてください m(_ _;m
メンテ
Re: マップ切り替え ( No.11 )
名前:RON 日時:2015/01/14 08:51

分かりました。 今私は、遠くに行ってますので明日メールの方を送ります! 申し訳ないです…
メンテ
Re: マップ切り替え ( No.12 )
名前:RON 日時:2015/01/15 21:06

今日、帰宅しましたので早速メールの方送らせていただきました。 何度もメールをしてしまい、大変申し訳ないです!
メンテ
Re: マップ切り替え ( No.13 )
名前:管理人 日時:2015/01/16 00:30

ありがとうございます、今度はメールを受け取ることができました ゲームを開始すると chap5\media\stage\kriby\map1.txt のマップが表示されて、 マップの右端に行くと同じマップ( chap5\media\stage\kriby\map1.txt )の左端に戻りますね・・・ すみません、RONさんとしては、こちらのプログラムでどのような動作を望まれていて、 それが現在どのようになってしまっているかを教えて頂けないでしょうか?
メンテ
Re: マップ切り替え ( No.14 )
名前:RON 日時:2015/01/18 15:43

今の状態は次に移動したときは切り替えができるのですが・・・次のステージから戻ろうとしたときに最初のステージの初期位置に戻ってしまうのです。 実現したいのは最初のステージの初期位置はそのままで次のステージから戻るときに初期位置を変更したいのです・・・^^;
メンテ
Re: マップ切り替え ( No.15 )
名前:管理人 日時:2015/01/18 17:53

ご説明ありがとうございます まだちゃんとRONさんの意図を理解できたとは言えませんが とりあえず以下のようにしたところ、初期位置に戻らないようになりました 1.gamemain.h の StageData 構造体に float oldscrollx; を追加する 2.gamemain.cpp の GameMain関数のこちらの部分を if(g_stagedata.hero.x >= (g_stagedata.mapwidth - 1) * IMG_CHIPSIZE){ kriby(); } if(g_stagedata.hero.x <= (g_stagedata.mapwidth == 0) * IMG_CHIPSIZE){ g_stagedata.hero.x = g_stagedata.hero.oldx; g_stagedata.hero.y = g_stagedata.hero.oldy; InitStage(); }   こちらのように変更する if(g_stagedata.hero.x >= (g_stagedata.mapwidth - 1) * IMG_CHIPSIZE){ g_stagedata.hero.oldy = g_stagedata.hero.y; g_stagedata.hero.oldx = g_stagedata.hero.x; 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; } 最初 hero の座標だけ復元してみたのですがそれだけでは駄目で、その後スクロールの値も復元したところ上手くいきました よろしければお試しください
メンテ
Re: マップ切り替え ( No.16 )
名前:RON 日時:2015/01/20 10:13

管理人様 動作確認できました! ありがとうございます。まさかスクロールの数値も記憶するところまで思いつかなかったです・・・。 分からないことがあればまた質問したいと思います。 本当にありがとうございます。
メンテ

Page: 1 |

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

   クッキー保存