グーグルマップのようなマウス画像操作

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

グーグルマップのようなマウス画像操作

#1

投稿記事 by yskey » 15年前

どうもyskeyです。
現在DXLIBにて戦略ゲームを制作しています。
表示した世界地図をマウスで動かす、「グーグルマップ」的な操作を目指していて一応出来ました。
しかし、
・マウスポインタがマップの描画領域を超えるような位置に来たとき、ポインタを引き戻してもすぐにマップがその方向に動かない…
・ソースコードがなんだかスッキリしない…

まだまだ初心者なのでなかなか思うように行きません。どうかお助けください。

また、ウインドウのサイズは800×600、表示する画像は1600×1200を使用しています。
申し訳ありませんがプログラム全体は省かせていただきます。
Mouse.Button[0]やMouse.xとかは「ゲームプログラミングの館」でのものと同じです、
mapxy.xとmapxy.yは
DrawGraph(mapxy.x,mapxy.x,マップのハンドル,FALSE);
としてマップを描画するためのXY座標のint型変数です。
int MapControl(){
    static int nowX,nowY,nowMAPX,nowMAPY,OutFlag;
    if(Mouse.Button[0] == 1){
        nowX = Mouse.x;
        nowY = Mouse.y;
        nowMAPX = mapxy.x;
        nowMAPY = mapxy.y;
    }
    if(Mouse.Button[0] > 1){
                if(mapxy.x<-800 || mapxy.x>0 || mapxy.y<-600 || mapxy.y>0){
                nowX = Mouse.x;
                nowY = Mouse.y;
            }
            mapxy.x = (Mouse.x - nowX) + nowMAPX;
            mapxy.y = (Mouse.y - nowY) + nowMAPY;
    }
    if(mapxy.x<-800){mapxy.x= -800;}
    if(mapxy.x>0){mapxy.x= 0;}
    if(mapxy.y<-600){mapxy.y= -600;}
    if(mapxy.y>0){mapxy.y= 0;}
    return 0;
}

Ma

Re:グーグルマップのようなマウス画像操作

#2

投稿記事 by Ma » 15年前

if(mapxy.x<-800 || mapxy.x>0 || mapxy.y<-600 || mapxy.y>0){
nowX = Mouse.x;
nowY = Mouse.y;
}

↑これをやる意味は、なんでしょうか?
不必要に見えるのですが・・・・。

yskey

Re:グーグルマップのようなマウス画像操作

#3

投稿記事 by yskey » 15年前

すいません。消すの忘れていました。
一応それは
・マウスポインタがマップの描画領域を超えるような位置に来たとき、ポインタを引き戻してもすぐにマップがその方向に動かない…
のバグを直そうとして入れたものです。

Ma

Re:グーグルマップのようなマウス画像操作

#4

投稿記事 by Ma » 15年前

>すいません。消すの忘れていました。
それを消せば、私が想像する上ではgoogle map のように動作するとおもうのですがね。。。


>・マウスポインタがマップの描画領域を超えるような位置に来たとき、ポインタを引き戻してもすぐにマップがその方向に動かない…

もしかして、
if(mapxy.x<-800){mapxy.x= -800;}
if(mapxy.x>0){mapxy.x= 0;}
if(mapxy.y<-600){mapxy.y= -600;}
if(mapxy.y>0){mapxy.y= 0;}
これで値を修正したあとに、本来なら、修正直前の場所までいかないとマップが動き始めないところだけれど
値の修正後はポインタを少しでも移動し始めたら、また動き始めるようにしたいってことかな?

もし、それなら
bool change = false;
if(mapxy.x<-800){mapxy.x= -800;change = true;}
if(mapxy.x>0){mapxy.x= 0;change = true;}
if(mapxy.y<-600){mapxy.y= -600;change = true;}
if(mapxy.y>0){mapxy.y= 0;change = true;}
if(change){
nowX = Mouse.x;
nowY = Mouse.y;
}

こうとか、どうだろうか?

yskey

Re:グーグルマップのようなマウス画像操作

#5

投稿記事 by yskey » 15年前

すいません、プログラムを切り離して作りました。

Ma

Re:グーグルマップのようなマウス画像操作

#6

投稿記事 by Ma » 15年前

次のコードを

if(MAPX<-800){MAPX= -800;}
if(MAPX>0){MAPX= 0;}
if(MAPY<-600){MAPY= -600;}
if(MAPY>0){MAPY= 0;}

次のように書き換えてみてください。

bool change = false;
if(MAPX<-800){MAPX= -800;change = true;}
if(MAPX>0){MAPX= 0;change = true;}
if(MAPY<-600){MAPY= -600;change = true;}
if(MAPY>0){MAPY= 0;change = true;}
if(change){
nowMAPX = MAPX;
nowMAPY = MAPY;
nowX = Mouse.x;
nowY = Mouse.y;
}


これで、期待どおりに動きますか?

yskey

Re:グーグルマップのようなマウス画像操作

#7

投稿記事 by yskey » 15年前

上手くいきました。
boolを動的変数にするのがミソだったんですね…

こういうことに気づくには、やはり日ごろの鍛練が必要なんでしょうか?
画像

Ma

Re:グーグルマップのようなマウス画像操作

#8

投稿記事 by Ma » 15年前

>こういうことに気づくには、やはり日ごろの鍛練が必要なんでしょうか?
うーん。

修正がどれかでもあてはまるなら状態を再指定しないといけないと気づくかどうかは
直感ですかね・・・?しいていうなら、1度経験があれば思いつくかも。
(そこでもう一度クリックした場合を想像して思いつきました。)

次に、すべての判定をOR で判断するかもしくはフラグを作っておかないといけないと気づくのも
一度、似たようなプログラミングの経験があれば自然に気づくと思います。

私は熟練とはいえませんが、実験/経験つむとやはり思いつきがよくなりますよ。 画像

yskey

Re:グーグルマップのようなマウス画像操作

#9

投稿記事 by yskey » 15年前

>>Maさんありがとうございました。
これからがんばっていきたいと思います。

閉鎖

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