HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0201
hitochanマップデータ読み込みにおいて4解決


hitochan

リンク

2008/2/1(Fri) 22:30:11|NO.13368

さっそく質問なのですが、
「quoyle」という2Dマップ作成ソフトを使って2Dマップを作っています。
qmpファイルから配列変数に読み込みたいのですが、

dim map_data,map_sx*map_sy repeat map_sx*map_sy ;map_datamはマップのデータすべてが入っている。 memcpy map_data(cnt),map_datam,byte_p_chp,,cnt*byte_p_chp loop
サンプルでこのマップデータを表示するとうまく表示されるのですが、
このプログラムだと少し的外れな表示になります。
原因として何が考えられるでしょうか。お願いします。



この記事に返信する


a

リンク

2008/2/2(Sat) 20:08:11|NO.13379

さっそく質問よりも、quoyleの入手場所ぐらい書いて欲しかったぞ。
幸いすぐ見つかったけどさ。
http://homepage2.nifty.com/a_izayoi/download.htm

dim map_data,map_sx*map_sy
の配列に入れるって、どんな入れ方したいのか理解できないのだけど。
ヘルプとサンプルを少し見た感じだと、↓こんな感じだと思う。
書いただけでテストもなにもしてないから、本当に正しいかはわからんけどw

qmp_path = "hoge.qmp" //マップファイル読み込み exist qmp_path sdim load_data, strsize bload qmp_path, load_data //マップサイズ map_sx = wpeek(load_data, 0) map_sy = wpeek(load_data, 2) //チップサイズ chp_sx = wpeek(load_data, 4) chp_sy = wpeek(load_data, 6) //レイヤー枚数 layer = peek(load_data, 8) //チップモード chp_mode = peek(load_data, 9) //チップ当たりのbyte数代入 byte_p_chp = chp_mode + 1 //レイヤー名 sdim lay_nam, 144 memcpy lay_nam, load_data, 144, 0, 0x10 //マップチップ用画像パスの長さ chp_p_size = wpeek(load_data, 0xA0) //マップチップ用画像パス sdim chp_path, chp_p_size memcpy chp_path, load_data, 0, 0xA2, chp_p_size //配列変数へ移し変え dim map_data, map_sx, map_sy, layer offset = 0xA2 + chp_p_size for l, 0, layer, 1 for y, 0, map_sy, 1 for x, 0, map_sx, 1 if( chp_mode ) { map_data(x,y,l) = wpeek(load_data, offset) offset += 2 } else { map_data(x,y,l) = peek(load_data, offset) offset += 1 } next next next //バッファを破棄 sdim load_data,1



hitochan

リンク

2008/2/2(Sat) 21:18:03|NO.13383

quoyleの入手場所記しておかなくてすいませんでした。
aさんのプログラムはとても効率的だと思います。
なので使わせていただきたいと思いますが、
僕のプログラムは何かおかしいところがありますか?

data=""+dir_cur+"\\gamedata\\" exist data+"developmentcenter.qmp" sdim load_data,strsize bload data+"developmentcenter.qmp",load_data map_sx=wpeek (load_data,0) map_sy=wpeek (load_data,2) //チップサイズ cx=wpeek (load_data , 4) cy=wpeek (load_data , 6) //レイヤー枚数 layer=peek (load_data , 8) //チップモード chp_mode=peek (load_data , 9) //チップ当たりのbyte数代入 byte_p_chp=chp_mode+1 //マップチップチップパス chp_p_size=wpeek (load_data , 160) //マップデータ格納用のデータ処理 alloc map_datam,map_sx * map_sy * byte_p_chp *layer //マップデータ抜き出し memcpy map_datam , load_data , map_sx * map_sy * byte_p_chp * layer , , 162+chp_p_size //読み込んだ元データ消去 sdim load_data,1 sdim map_data,byte_p_shp,map_sx*map_sy repeat map_sx*map_sy memcpy map_data(cnt),map_datam,byte_p_chp,,cnt*byte_p_chp map_data(cnt)=int(map_data(cnt)) loop



a

リンク

2008/2/2(Sat) 22:25:02|NO.13384

sdim map_data,byte_p_shp,map_sx*map_sy
で、map_dataを文字列変数として確保したのに、
map_data(cnt)=int(map_data(cnt))
で、整数を代入してるから、確保が無効になってしまってるし、
int(map_data(cnt))をしても、文字列変数に格納されたバイナリーデータは
int()では正しく取り出せないよ。

と、なかりぐちゃぐちゃになってるので、どうしたいのか理解不能。



hitochan

リンク

2008/2/3(Sun) 11:29:11|NO.13390

aさんの方法でできました!ありがとうございます。
僕は1次元の配列変数(map_sx*map_sy)に順番に代入したかったんです。
でもaさんの方法の方が効率的なのでそちらを使わせていただきます。
ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.