シレンやチョコボ等の増すごとの移動とは違い
自由に移動できるタイプを考えております。(聖剣伝説?みたいなかんじです)
シレン等の移動方法は一度作ったことがあるので
出来るのですが自由に移動できるとなると判定の仕方がよくわかりません。
現在、下記の様なソースなのですが移動が挙動な動きをしてしまいます・・・。
どこをどのように修正すれば良いか教えては頂けないでしょうか?
※大変申し訳ないのですがソースを一部抜粋しております。
わかりにくい関数がありましたら教えて頂けますと助かります。
//////////////////////////////////////////////////
初期化
//////////////////////////////////////////////////
typedef struct{
float Px,Py,Mx,My;
int Cx,Cy;
float Speed;
}CHR;
CHR Play;
int H_char;
int H_box;
extern KEY Key[256];
int Map[15][20] = {
{1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1},
{1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1}
};
//////////////////////////////////////////////////
ループ
//////////////////////////////////////////////////
Play.Mx = 0;
Play.My = 0;
Play.Cx = int(Play.Px/32);
Play.Cy = int(Play.Py/32);
if(Key[KEY_INPUT_RIGHT].Key) Play.Mx = Play.Speed ;
if(Key[KEY_INPUT_LEFT].Key) Play.Mx = -Play.Speed ;
if(Key[KEY_INPUT_UP].Key) Play.My = -Play.Speed ;
if(Key[KEY_INPUT_DOWN].Key) Play.My = Play.Speed ;
Play.Px += Play.Mx;
Play.Py += Play.My;
if(Play.Mx < 0){
if(Map[Play.Cy][Play.Cx] == 1) Play.Px = (float)Play.Cx * 32 + 32;
if(Map[Play.Cy][Play.Cx] == 1) Play.Py = (float)Play.Cy * 32 + 32;
}else{
if(Map[Play.Cy][Play.Cx] == 1) Play.Px = (float)Play.Cx * 32 - 32;
if(Map[Play.Cy][Play.Cx] == 1) Play.Py = (float)Play.Cy * 32 - 32;
}
//////////////////////////////////////////////////
描画
//////////////////////////////////////////////////
for(int i=0; i<15; i++){
for(int j=0; j<20; j++){
if(Map[j] == 1) DrawGraph( j*32, i*32 , H_box , true ) ;
}
}
DrawGraph( (int)Play.Px, (int)Play.Py , H_char , true ) ;