【初心者】スレを立てる前にココで質問を【Part21】
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2010/04/02(金) 00:21:35ID:zsqivwcwスレッドを立てる前にはローカルルールを読みましょう。
http://pc11.2ch.net/gamedev/
※ >>980 を踏んだ人は次スレ立てをお願いします。
【アップローダ・避難所・Wiki】
ゲーム製作技術板公式Wiki
http://wiki.game-develop.com/
ゲーム製作技術板公式アップローダ
http://gmdev.xrea.jp/
ゲーム製作技術板予備(機能停止中?)
http://yy13.kakiko.com/gamdev/
アップローダー予備
http://gamdev.hp.infoseek.co.jp/
gamdev.orgが落ちるたびにあげてみるスレ
http://pc11.2ch.net/test/read.cgi/gamedev/1107022166/
0259名前は開発中のものです。
2010/05/31(月) 10:44:58ID:BTSw9VY2プレイヤーが移動するたびに動的にマップデータを読み込んで
マップを表示するようにしたいんですけど
マップを実際に表示するためのデータはどう作るのが理想的なんでしょうか
最初はマップ1マス毎の構造体を作ってそれをリストにして
プレイヤーが動く度に見えなくなった列のマスを廃棄、新しい列のマスをマップデータから読み込み
とやっていたんですけど
いちいち開放、確保をやるのも馬鹿らしかったのと、見える範囲のマスの量は一定なのだから
配列で作ったほうが良いと思い作り直し始めたんです
でも考えてみると今の書き方だとリストにせよ配列にせよ
表示するマップデータを1列変えるだけで相当な条件分岐を使ってるんですよ
マップファイルから取り込んだ新しく追加する1列に含まれるマス数
×
要らなくなり、取り替える必要のある1列に含まれるマス数
×
要らなくなり、取り替える必要のあるマスを現在の表示マップデータから1マスずつ検索する為の分岐
毎Fごとにこれをやるのは結構な負担になると思うのでどうにか良い方法はないかと思ってるんですけど
自分の頭では思いつけませんでした
良い方法があったら教えてもらえませんか?よろしくお願いします
0260名前は開発中のものです。
2010/05/31(月) 13:19:29ID:V4wY+c/3どのくらいのマップ?1マスのバイト数は?
0261名前は開発中のものです。
2010/05/31(月) 13:38:41ID:V4wY+c/3データセットを9個作りそれを3×3に配置する。データセットは1画面をカバー
できる情報量を持たせる。
1 2 3 4(座標)
×□□□
×□■□ ■プレイヤーキャラがいる場所
×□□□
プレイヤーキャラが移動し、となりのデータセットのマスに移動した時点で
1 2 3 4
□□□×
□■□× (左に移動
□□□×
データセットの中身を変更する。X座標4のデータセットはX座標1のデータセットに
上書きする。画面表示時の読み出しはプレイヤーキャラの位置からどのデータセットの
どの位置のマスを参照するかを計算によって特定する。
0262名前は開発中のものです。
2010/05/31(月) 13:41:16ID:V4wY+c/3データセット変更のタイミングを工夫すればプレイヤーがセットの境界で後戻りした場合
など余計なファイルアクセスを軽減できる。
0263名前は開発中のものです。
2010/05/31(月) 14:06:35ID:BxJvMFWgマップの幅と高さはヘッダに入れるか別途管理しておいて、
1マスごとにnバイトずつpeekとかで読込み、列と行の2重ループで展開するだけ。
■ヘッダ部:…54… (列と行のサイズ。他にレイヤー数など)
■データ部:00700117112272233733
■展開:(実際は番号に従ってチップ画像を表示)
00700
11711
22722
33733
■実際の処理:
for(row=0:row<=rowMax:row++){
if(表示画面の範囲外){ continue; }
for(col=0:col<=colMax:col++){
if(表示画面の範囲外){ continue; }
cell=(row*colMax)+col; //何マス目か
chip=ヘッダバイト+(nバイト×cell); //そのマスのチップ番号
// 以下、chip番号に該当する画像をnマス目の部分に表示
}
}
あと普通はマップデータをファイルから読込むのは画面切替の時とかに一度だけで
スクロールごとにロードなんてしない。
0264名前は開発中のものです。
2010/05/31(月) 14:29:15ID:BxJvMFWg確かにぐぐるマップみたいに分割読み込みすることは場合によってはあり得るけど
初質だし、そういう凝ったことがしたいわけじゃないだろうと思ったから
普通のRPG程度のデータなら問題ないはずだし、いちいちファイルアクセスするのは
遅くなるだけだから無闇にロードはしない方がいいぞ、って意味
0265名前は開発中のものです。
2010/05/31(月) 14:43:01ID:BTSw9VY2マップの大きさは一辺が8185です。
1マスのバイト数は8バイトと少し大きめのファイルになっています。
ちょっとメモリ上に置くには大きすぎるのでファイル読み込み式にしたいです
>>261
実は同じような感じでマス16個(4×4)で構成される構造体を作り
更にプレイヤーの歩くモーションのループ処理の直前にマップ情報読み込み判定を付けることで
毎回の読み込みをさせないようにしたことはあったのですが
その方法だとある特定のフレームにだけ高負荷を掛ける事になり
後々に作る他のシステムとの相性によってはゲーム中に違和感がでる
フレームの遅延が起きそうだったのでちょっと考えてたんです
情報を小出しにするようなマネをしてごめんなさい
>>262
上の方法でやった時はunsigned int の上位2バイトにx、下位2バイトにy座標を持たせたデータを使っていました
■ このスレッドは過去ログ倉庫に格納されています