マップエディタ
Re:マップエディタ
画像の表示方法は分かっているんですよね?
それならば、画像の表示場所をマウスカーソルの位置へ変更してやれば良いですよ。
マウスに関する事は下記URL参照で…
http://www.geocities.jp/ky_webid/win32c/007.html
それならば、画像の表示場所をマウスカーソルの位置へ変更してやれば良いですよ。
マウスに関する事は下記URL参照で…
http://www.geocities.jp/ky_webid/win32c/007.html
Re:マップエディタ
いきなり画像を表示しようとすると
なかなかうまくいきそうにないと思ったので、
とりあえず、ドット(点)を
クリックした位置に表示してみようとしました。
とりあえずこんな感じで作ってみたのですが・・・・・・
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MouseX , MouseY ;
int Cr ;
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 )
{
return -1;
}
SetMouseDispFlag( TRUE ) ;
Cr = GetColor( 255 , 255 , 255 ) ;
while( CheckHitKeyAll() == 0 )
{
GetMousePoint( &MouseX , &MouseY ) ;
DrawPixel( MouseX , MouseY , Cr ) ;
if( ProcessMessage() == -1 )
{
break ;
}
}
DxLib_End() ;
return 0 ;
}
これでは、
『クリックした場所』
ではなく、
『マウスカーソルがある位置』
にドット(点)が表示されるようになってしまいます。
どうすればいいですか?
よろしくお願いします。
なかなかうまくいきそうにないと思ったので、
とりあえず、ドット(点)を
クリックした位置に表示してみようとしました。
とりあえずこんな感じで作ってみたのですが・・・・・・
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int MouseX , MouseY ;
int Cr ;
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 )
{
return -1;
}
SetMouseDispFlag( TRUE ) ;
Cr = GetColor( 255 , 255 , 255 ) ;
while( CheckHitKeyAll() == 0 )
{
GetMousePoint( &MouseX , &MouseY ) ;
DrawPixel( MouseX , MouseY , Cr ) ;
if( ProcessMessage() == -1 )
{
break ;
}
}
DxLib_End() ;
return 0 ;
}
これでは、
『クリックした場所』
ではなく、
『マウスカーソルがある位置』
にドット(点)が表示されるようになってしまいます。
どうすればいいですか?
よろしくお願いします。
Re:マップエディタ
本家をご覧ください。
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N8
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N8
Re:マップエディタ
返事が遅れてすいません
時間がなかったもので・・・・・・
おかげでできました!
ありがとうございます。
今、別のウィンドウを開いて画像を表示しようと
思っているのですが、本体とは別のウィンドウを表示するには、
どうすればいいのでしょうか?
連続で質問してすいません。
どうかよろしくお願いいたします。
時間がなかったもので・・・・・・
おかげでできました!
ありがとうございます。
今、別のウィンドウを開いて画像を表示しようと
思っているのですが、本体とは別のウィンドウを表示するには、
どうすればいいのでしょうか?
連続で質問してすいません。
どうかよろしくお願いいたします。
Re:マップエディタ
本来、DXライブラリは同時に複数のウィンドウへの描画をサポートしていません。
マップエディタが本来の目的なので、
DXライブラリを使用しない方向に転換したほうが一番の解決策かと思います。
WINAPIで独立したウィンドウの生成はさほど難しくないので。
ただ、WNIAPIを使いこなすことが結構大変です。
まとめサイトは数多くあるので、気長にがんばってください。
マップエディタが本来の目的なので、
DXライブラリを使用しない方向に転換したほうが一番の解決策かと思います。
WINAPIで独立したウィンドウの生成はさほど難しくないので。
ただ、WNIAPIを使いこなすことが結構大変です。
まとめサイトは数多くあるので、気長にがんばってください。
Re:マップエディタ
Dxライブラリではできないのですか・・・・・・
これが一番簡単で
自由に作れると思って使っていたのですが・・・・・・
ありがとうございました。
がんばってみます。
ところで、
WINAPIのまとめサイトで
お勧めのサイトってありますか?
今検索していて、たくさんあったので・・・・・・
教えていただけるとありがたいです。
これが一番簡単で
自由に作れると思って使っていたのですが・・・・・・
ありがとうございました。
がんばってみます。
ところで、
WINAPIのまとめサイトで
お勧めのサイトってありますか?
今検索していて、たくさんあったので・・・・・・
教えていただけるとありがたいです。
Re:マップエディタ
別のWindowを開かないで済むように仕様変更をするという方法もありますね。
例えば、別のWindowに描画しようとしているものを、画面の端の方に描画してやるとか…
例えば、別のWindowに描画しようとしているものを、画面の端の方に描画してやるとか…
Re:マップエディタ
お二方、どうもありがとうございます。
バグさん
その方法はいいですね。
まったく思いつきませんでした。
ただ、それだとマップチップみたいなのを
表示する部分と作ったマップを表示する部分が違うので
処理を二つに分けてそれぞれ表示するようになると思うのですが、
どのようにしてはければいいのですか?
X座標の○~○の部分をクリックしたら・・・・・・
みたいな感じになるのですか?
お願いします。
kazuoniさん
ありがとうございます。
確かにここならわかりやすそうですね。
ですが、やはりバグさんの方法が
自分にはやりやすいように思います。
なので、すみませんがバグさんの方にお願いすることにします。
ここのサイトはいいと思いますので、
お気に入りに保存しておいて、
後で困ったとき、見るようにしたいと思います。
本当にありがとうございました。
バグさん
その方法はいいですね。
まったく思いつきませんでした。
ただ、それだとマップチップみたいなのを
表示する部分と作ったマップを表示する部分が違うので
処理を二つに分けてそれぞれ表示するようになると思うのですが、
どのようにしてはければいいのですか?
X座標の○~○の部分をクリックしたら・・・・・・
みたいな感じになるのですか?
お願いします。
kazuoniさん
ありがとうございます。
確かにここならわかりやすそうですね。
ですが、やはりバグさんの方法が
自分にはやりやすいように思います。
なので、すみませんがバグさんの方にお願いすることにします。
ここのサイトはいいと思いますので、
お気に入りに保存しておいて、
後で困ったとき、見るようにしたいと思います。
本当にありがとうございました。
Re:マップエディタ
うーん、お願いしますと言われても…(苦笑)
>>ただ、それだとマップチップみたいなのを
>>表示する部分と作ったマップを表示する部分が違うので
>>処理を二つに分けてそれぞれ表示するようになると思うのですが、
>>どのようにしてはければいいのですか?
>>X座標の○~○の部分をクリックしたら・・・・・・
>>みたいな感じになるのですか?
そうですね、おおむねそんな感じだと思います。
クリックされた位置情報から何を行うべきなのかをこちらで判断してやるといった感じですね。
とりあえず、私が作るんだったら、エディットマップ描画部、マップチップ選択部、メニュー選択部みたいに細かく分けて考えますね。
エディットマップ描画部がクリックされたら現在選択されているマップチップを選択された場所へ置く。
マップチップ選択部がクリックされたら、選択されているマップチップを切り替える。
メニュー選択部がクリックされたら、選択された処理(セーブやロードとか?)を行う。
かなり大雑把ではありますけどね(^_^;)
>>ただ、それだとマップチップみたいなのを
>>表示する部分と作ったマップを表示する部分が違うので
>>処理を二つに分けてそれぞれ表示するようになると思うのですが、
>>どのようにしてはければいいのですか?
>>X座標の○~○の部分をクリックしたら・・・・・・
>>みたいな感じになるのですか?
そうですね、おおむねそんな感じだと思います。
クリックされた位置情報から何を行うべきなのかをこちらで判断してやるといった感じですね。
とりあえず、私が作るんだったら、エディットマップ描画部、マップチップ選択部、メニュー選択部みたいに細かく分けて考えますね。
エディットマップ描画部がクリックされたら現在選択されているマップチップを選択された場所へ置く。
マップチップ選択部がクリックされたら、選択されているマップチップを切り替える。
メニュー選択部がクリックされたら、選択された処理(セーブやロードとか?)を行う。
かなり大雑把ではありますけどね(^_^;)
Re:マップエディタ
if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 )
{
・・・・・・・・・・・・
}
こんな感じで
クリックした位置のX座標とY座標の位置を取得する方法はわかるのですが、
どうすればいいのですか?
if でいいのですか?
{
・・・・・・・・・・・・
}
こんな感じで
クリックした位置のX座標とY座標の位置を取得する方法はわかるのですが、
どうすればいいのですか?
if でいいのですか?

Re:マップエディタ
それで良いかどうかは何をしたいかによって変わります。
まずは、自分のやりたい事を細かく分析して箇条書きにしてみてください。
そして、それを実現するにはどうしたらよいかを考えてください。
考えがまとまったら、プログラムを書いてください。
実行してみて意図しない動きをしたのならば、その原因を考えてみてください。
それでも駄目ならば、質問してください。何でもかんでも質問しないで、トライ&エラーを繰り返し経験しないと実力はつきませんよ。
まずは、自分のやりたい事を細かく分析して箇条書きにしてみてください。
そして、それを実現するにはどうしたらよいかを考えてください。
考えがまとまったら、プログラムを書いてください。
実行してみて意図しない動きをしたのならば、その原因を考えてみてください。
それでも駄目ならば、質問してください。何でもかんでも質問しないで、トライ&エラーを繰り返し経験しないと実力はつきませんよ。
Re:マップエディタ
バグさんのイメージが、
自分の考えていたイメージに似ていたので、
イメージ通りになるように考えてみました。
画面を分けるために、
if( ( MouseX ) >= 250 )
{
DrawPixel( MouseX , MouseY , Cr ) ;
}
こんな感じでうまくいったのですが、
マップチップの選択方法について、
悩んでいて・・・・・・
画像のような一まとめにしたマップチップの画像の一部を
マップチップ選択部をクリックし、
16×16位の小さな画像に分割・メモリに保存/上書きして、
マップ描画部で、クリックしたところに描画する。
LoadDivGraph を使って分割して読み込めば、
いけると思ったのですが、どうもうまくいきません。
というより、そのようなことは可能ですか?
自分の考えていたイメージに似ていたので、
イメージ通りになるように考えてみました。
画面を分けるために、
if( ( MouseX ) >= 250 )
{
DrawPixel( MouseX , MouseY , Cr ) ;
}
こんな感じでうまくいったのですが、
マップチップの選択方法について、
悩んでいて・・・・・・
画像のような一まとめにしたマップチップの画像の一部を
マップチップ選択部をクリックし、
16×16位の小さな画像に分割・メモリに保存/上書きして、
マップ描画部で、クリックしたところに描画する。
LoadDivGraph を使って分割して読み込めば、
いけると思ったのですが、どうもうまくいきません。
というより、そのようなことは可能ですか?
Re:マップエディタ
LoadDivGraphでできるはずです。
ファイルのパスをしっかり確認してください。
使い方は本家参照で。
http://homepage2.nifty.com/natupaji/DxL ... .html#R3N3
ファイルのパスをしっかり確認してください。
使い方は本家参照で。
http://homepage2.nifty.com/natupaji/DxL ... .html#R3N3
Re:マップエディタ
kazuoniさんの言うとおり、
ファイルのパスがどこかおかしかったみたいで、
表示できるようになりました。
ですが、今表示しているのは、
[ 3 ]のようにあらかじめ設定してある
部分だけです。
なので、[ i ]のように、
あらかじめ変数を設定しておき、
クリックした位置によって、
変数"i"を変更できれば、うまくいくと思っています。
ですが、クリックした位置によって分割した画像を
変更する方法に困っています、
ifを使えば解決すると思ったのですが、
コードが長くなり、大変です。
どうしたらいいですか?
素直にifですべていくしかないのでしょうか?
ファイルのパスがどこかおかしかったみたいで、
表示できるようになりました。
ですが、今表示しているのは、
[ 3 ]のようにあらかじめ設定してある
部分だけです。
なので、[ i ]のように、
あらかじめ変数を設定しておき、
クリックした位置によって、
変数"i"を変更できれば、うまくいくと思っています。
ですが、クリックした位置によって分割した画像を
変更する方法に困っています、
ifを使えば解決すると思ったのですが、
コードが長くなり、大変です。
どうしたらいいですか?
素直にifですべていくしかないのでしょうか?
Re:マップエディタ
一番の質問が良く理解できません。
>クリックした位置によって分割した画像を変更する方法
int image[16];
DrawGraph(... , image,TRUE);
なんてやっているならば、iを変更するだけで画像は変わりますよね。
iの変更方法で詰まっているのかな?と感じます。
例えばクリックしたときマウスの座標が
x=100 y=100
のとき、iは何番になるんだと。
それはそれを判別するプログラム(関数)をゴリゴリ書くしかありません。
雰囲気書いてみました。動作確認していないので悪しからず。
>クリックした位置によって分割した画像を変更する方法
int image[16];
DrawGraph(... , image,TRUE);
なんてやっているならば、iを変更するだけで画像は変わりますよね。
iの変更方法で詰まっているのかな?と感じます。
例えばクリックしたときマウスの座標が
x=100 y=100
のとき、iは何番になるんだと。
それはそれを判別するプログラム(関数)をゴリゴリ書くしかありません。
雰囲気書いてみました。動作確認していないので悪しからず。
Re:マップエディタ
すいません
書き方が悪かったです。
つまり、
マップチップ表示部の、
描画したいマップチップをクリック
例えば X=16~32、Y=0~16 画像の左上のほうの
「たたみ」の部分をクリックする。
↓
「たたみ」の部分の分割した番号〔この場合は1〕をiに保存
↓
DrawGraph( MouseX , MouseY , Mp_testchip[ i ] , TRUE ) ;
こういう感じでポインタの位置に表示できるように
用意しておき、クリックと同時に描画する。

書き方が悪かったです。
つまり、
マップチップ表示部の、
描画したいマップチップをクリック
例えば X=16~32、Y=0~16 画像の左上のほうの
「たたみ」の部分をクリックする。
↓
「たたみ」の部分の分割した番号〔この場合は1〕をiに保存
↓
DrawGraph( MouseX , MouseY , Mp_testchip[ i ] , TRUE ) ;
こういう感じでポインタの位置に表示できるように
用意しておき、クリックと同時に描画する。

Re:マップエディタ
int MouseX,MouseY;
GetMousePoint(&MouseX,&MouseY);
i=MouseX/16+MouseY/16*8;
/*補足 i=MouseX/画像横幅+MouseY/画像縦幅*一行辺りの画像数; */
こういうことですか?
GetMousePoint(&MouseX,&MouseY);
i=MouseX/16+MouseY/16*8;
/*補足 i=MouseX/画像横幅+MouseY/画像縦幅*一行辺りの画像数; */
こういうことですか?
Re:マップエディタ
もう、マップエディタのほうは
ほとんど完成しました。
ただ、今のままだとクリックした場所
すべてにマップチップが表示されてしまうことになるので、
きれいに描画するのが、難しくなってしまいます。
そこで、描画画面を
┼┼┼┼┼┼┼┼┼┼
┼┼┼┼╋╋┼┼┼┼
┼┼┼┼╋╋┼┼┼┼
┼┼┼┼┼┼┼┼┼┼
こんな感じのマス目のように考えて、
ここの
╋━━╋
┃● ┃
┃ ■┃
╋━━╋
●や■の部分など、
1つのマス目の中ならどこをクリックしても
マス目の部分にマップチップを描画するようにする
というようなことは出来ますか?
最初は、マップチップを選択する要領でいけると
思っていたのですが、
どうも出来そうになさそうなので、
質問させていただきます。
ほとんど完成しました。
ただ、今のままだとクリックした場所
すべてにマップチップが表示されてしまうことになるので、
きれいに描画するのが、難しくなってしまいます。
そこで、描画画面を
┼┼┼┼┼┼┼┼┼┼
┼┼┼┼╋╋┼┼┼┼
┼┼┼┼╋╋┼┼┼┼
┼┼┼┼┼┼┼┼┼┼
こんな感じのマス目のように考えて、
ここの
╋━━╋
┃● ┃
┃ ■┃
╋━━╋
●や■の部分など、
1つのマス目の中ならどこをクリックしても
マス目の部分にマップチップを描画するようにする
というようなことは出来ますか?
最初は、マップチップを選択する要領でいけると
思っていたのですが、
どうも出来そうになさそうなので、
質問させていただきます。
Re:マップエディタ
int MouseX,MouseY;
int MapX,MapY;
GetMousePoint(&MouseX,&MouseY);
MapX=MouseX/16;
MapY=MouseY/16;
DrawGraph(MapX*16,MapY*16,Mp_testchip,TRUE);
/*補足 MapX=マス単位のX座標 MapY=マス単位のY座標*/
こういうことですか?
int MapX,MapY;
GetMousePoint(&MouseX,&MouseY);
MapX=MouseX/16;
MapY=MouseY/16;
DrawGraph(MapX*16,MapY*16,Mp_testchip,TRUE);
/*補足 MapX=マス単位のX座標 MapY=マス単位のY座標*/
こういうことですか?
Re:マップエディタ
> ただ、今のままだとクリックした場所
> すべてにマップチップが表示されてしまう
この状況が良くわかりませんが、雰囲気で考えると、
クリックした場所が左上頂点として描写されるってことでしょか?
とりあえず、自分ならば以下のように実装します。
マップチップ描写エリアを確保し、
そのデータ保存のためのメモリを配列で確保
↓
クリックした場所が描写エリアのどの場所に相当するのか
条件分岐で求める
↓
配列に画像データのハンドルを渡す
(画像データハンドルよりは画像データハンドルを格納しているデータ番号のほうがよいかも)
マップの描写は画像データハンドルの有無で分岐すればよいです。
#いずれか「ちゃんと考えたの?」なんて突込みが入りそうですが・・・
> すべてにマップチップが表示されてしまう
この状況が良くわかりませんが、雰囲気で考えると、
クリックした場所が左上頂点として描写されるってことでしょか?
とりあえず、自分ならば以下のように実装します。
マップチップ描写エリアを確保し、
そのデータ保存のためのメモリを配列で確保
↓
クリックした場所が描写エリアのどの場所に相当するのか
条件分岐で求める
↓
配列に画像データのハンドルを渡す
(画像データハンドルよりは画像データハンドルを格納しているデータ番号のほうがよいかも)
マップの描写は画像データハンドルの有無で分岐すればよいです。
#いずれか「ちゃんと考えたの?」なんて突込みが入りそうですが・・・
Re:マップエディタ
消去はDrawBoxで画面右側だけを黒か何かで塗りつぶせば良いと思います
保存はマウスがクリックされたときにチップ番号を二次元配列に記録すれば良いと思います
配列に記憶
~~~~~~~~~~~~~~~
int Map[256][256];
int MouseX,MouseY;
int MapX,MapY;
GetMousePoint(&MouseX,&MouseY);
MapX=MouseX/16;
MapY=MouseY/16;
DrawGraph(MapX*16,MapY*16,Mp_testchip,TRUE);
Map[MapY][MapX]=i;//←配列に記憶
~~~~~~~~~~~~~~~
ファイルに保存
~~~~~~~~~~~~~~~
FILE *fp;
fp=fopen("map.bin","wb");
fwrite(Map,256*256*sizeof(int),1,fp);
fclose(fp);
~~~~~~~~~~~~~~~
ファイルから読み込み
~~~~~~~~~~~~~~~
FILE *fp;
fp=fopen("map.bin","rb");
fread(Map,256*256*sizeof(int),1,fp);
fclose(fp);
~~~~~~~~~~~~~~~
読み込んだマップを描画
~~~~~~~~~~~~~~~
int i,j;
for(i=0;i<256;i++)
{
for(j=0;j<256;j++)
{
DrawGraph(j*16,i*16,Mp_testchip[Map[j]],TRUE);
}
}
~~~~~~~~~~~~~~~
画面が実行されるってなんのことを指しているのでしょうか?
保存はマウスがクリックされたときにチップ番号を二次元配列に記録すれば良いと思います
配列に記憶
~~~~~~~~~~~~~~~
int Map[256][256];
int MouseX,MouseY;
int MapX,MapY;
GetMousePoint(&MouseX,&MouseY);
MapX=MouseX/16;
MapY=MouseY/16;
DrawGraph(MapX*16,MapY*16,Mp_testchip,TRUE);
Map[MapY][MapX]=i;//←配列に記憶
~~~~~~~~~~~~~~~
ファイルに保存
~~~~~~~~~~~~~~~
FILE *fp;
fp=fopen("map.bin","wb");
fwrite(Map,256*256*sizeof(int),1,fp);
fclose(fp);
~~~~~~~~~~~~~~~
ファイルから読み込み
~~~~~~~~~~~~~~~
FILE *fp;
fp=fopen("map.bin","rb");
fread(Map,256*256*sizeof(int),1,fp);
fclose(fp);
~~~~~~~~~~~~~~~
読み込んだマップを描画
~~~~~~~~~~~~~~~
int i,j;
for(i=0;i<256;i++)
{
for(j=0;j<256;j++)
{
DrawGraph(j*16,i*16,Mp_testchip[Map[j]],TRUE);
}
}
~~~~~~~~~~~~~~~
画面が実行されるってなんのことを指しているのでしょうか?