ご指導お願いいたします

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
マック

ご指導お願いいたします

#1

投稿記事 by マック » 18年前

現在こちらのゲームプログラミングの24項目をベースに
ファミコンゼルダのような物を考えていて
現在MAPの移り変わりについてやっているのですが
イメージしている動きに中々いかない状態です。


現在のソースなのですが
簡単なmapを表示し、hantei[/url][/url]の中身が
MAP切り替えの数値だった場合map_typeを変え
次を表示という形にしています。
(can_notの関数の所で行っているため現在切り替わりがおかしい状態又、
切り替わり時に自キャラを移動していないのでmapが切り替わった瞬間の位置が悪いです)


今やりたいこととして下のような配列があるとして(今現在0,1以外はmap_typeを切り替える数値です)
hantei[/url][/url]={
    {1,1,1,1,2,2,2,2,1,1,1,1},         //////////////////////////
    {1,0,0,0,0,0,0,0,0,0,0,1},         /             /
    {1,0,0,0,0,0,0,0,0,0,0,1},         /                        /
    {1,0,0,0,0,0,0,0,0,0,0,1},         /             /         
    {3,0,0,0,0,0,0,0,0,0,0,4},         /             /
    {3,0,0,0,0,0,0,0,0,0,0,4},         / 空白部分が目に見える部分 /
    {3,0,0,0,0,0,0,0,0,0,0,4},         /    (/の部分が1や2)    /
    {1,0,0,0,0,0,0,0,0,0,0,1},         /             /
    {1,0,0,0,0,0,0,0,0,0,0,1},         /             /
    {1,0,0,0,0,0,0,0,0,0,0,1},         /             / 
    {1,1,1,1,5,5,5,5,1,1,1,1},         //////////////////////////
};
があるとして表示した際右のように表示させたいのですが
どのようにやればいいでしょうか?

又わざわざそんなことをしなくても現在の表示の方法でこう組めばうまく
切り替えができる等ございましたら
ご指摘のほどよろしくお願いいたします。
 

マック

Re:ご指導お願いいたします

#2

投稿記事 by マック » 18年前

zipの添付がうまくいかなかったので
txtで添付させていただきます

マック

Re:ご指導お願いいたします

#3

投稿記事 by マック » 18年前

容量がでか過ぎて全部送れなかったようですので修正版を。
最低限のソースと画像のみ入れてZIPにしています。
上のやつを編集したかったのですがパス設定をしてなかったのでできませんでした。


後表示させたいものの図がすごいずれてますね申し訳ないです。
添付ファイルに書きたかった図をのせておきます。
ちなみにつかっている物は、
VC++2005EXpress Edition
OSはwindows 2000です

Justy

Re:ご指導お願いいたします

#4

投稿記事 by Justy » 18年前

右のように表示させたいのですが

 つまり、ワープポイント(2~5)も壁として表示したい、ということでしょうか?
(そうでなければ、もう少し補足をお願いします)

 なら単純に壁の描画部分の判定を
[color=#d0d0ff" face="monospace]    if(hantei[j])
        DrawGraph(j * 32,i * 32,image2,TRUE);    // 壁画像を表示
[/color]

 とすれば、hantei[j]が0以外なら壁が描画されます。


こう組めばうまく
 同じようなコードが延々とあったので、少し縮めてみました。
 参考までに。

マック

Re:ご指導お願いいたします

#5

投稿記事 by マック » 18年前

Justy様、ご返答ありがとうございます。

質問の意味がわかりにくくて申し訳ないです。

/*つまり、ワープポイント(2~5)も壁として表示したい、ということでしょうか?*/
ワープポイントについては壁を表示せずにその配列内にいったら中身に対応したMAPに移るようにしています。

表示させたい仕方をペイントで図を書いてみました。
悩んでいるところとして今の所、コンパイル後ウインドウズ画面で表示されますが
添付ファイルにある "やりたい事.bmp"のようにウインドウズ画面外から描画を
始めたいのと思っています。


又、ソースを作っていただきまして誠にありがとうございます。
ソースがスリムに!
まだ日が浅いためまとめ方やポインタ・関数の使い方は大変勉強になります。

Justy

Re:ご指導お願いいたします

#6

投稿記事 by Justy » 18年前

表示させたい仕方をペイントで図を書いてみました
添付ファイルにある "やりたい事.bmp"のようにウインドウズ画面外から
描画を 始めたいのと思っています
 概ね把握しました。
 つまり、画面外に壁やワープポイントするブロックがある、ということですね。

 やりかたとしてはタイプによっていろいろありますが、一番汎用性のあるのは
「カメラ」の概念を導入することです。

 キャラクタやマップの位置はあくまで内部的な管理上のものとして、
表示するときにその内部管理座標からカメラ通して見たときの位置に変換します。

 そうすることで、カメラの位置を動かすだけで、画面上の全てのものが
移動します。
(ビデオカメラを想像するとわかりやすいと思います)


 今回はスクロールするという話は出ていませんが、するしないに関わらず、
システム的にカメラ的な概念を入れることでマップの左上を画面外にすることができ、
尚かつ管理方法は表示のときを除いて今まで通りでOKとなります。

 ちなみに今回の場合、データ列が 20x15と画面ぴったりなので、
画面より一回り大きくなるよう22x17にデータを拡張した上で、カメラをマップの中央に
セットしておけば、自然と周囲の壁は画面の外にはみ出ます。



 簡単なサンプルを付けておきました。
 デバッグとして、ADWXのキーでカメラの位置を動かせます。

マック

Re:ご指導お願いいたします

#7

投稿記事 by マック » 18年前

Justy様、ご返答ありがとうございます。
返信が遅くなりまして申し訳ないです。


カメラの概念があるとは。カメラといえば3Dにしか使わないイメージでした。
実際にコンパイルしてみましたがこれは面白いですね^^
もうすこし理解して工夫すれば色々できそうです。
後はMAP移動後の自キャラの位置調節などをやればMAPの基本的な切り替わりはできそうです。


Justy様、ご協力誠にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る