上下左右の当たり判定
Posted: 2012年4月04日(水) 22:38
真上から見下ろし型でDrawbox関数で生成された赤い四角(プレイヤーは緑の四角)に当たるとその方向へは進めないようにしたいのですが、四角形を表示させることは出来ましたが、当たり判定の作成がどうしても上手くいきません。
形としては四角の四隅に当たり判定を設けて、どの面が接しているか判断させようとしています。
何度も考えて改変したのですが上手くいきません。どこか間違っているところを教えて下さい。
形としては四角の四隅に当たり判定を設けて、どの面が接しているか判断させようとしています。
#include "DxLib.h"
#include<math.h>
void stagecreate(int glid[10][10],int *x,int *y); //ステージ生成関数//
void playerpoint(int glid[10][10],int *x,int *y);//プレイヤーの位置描画&当たり判定関数//
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
int x=50,y=50;
int Glid[10][10]= {{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
};
while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0){
stagecreate(Glid,&x,&y);
playerpoint(Glid,&x,&y);
}
DxLib_End();
return 0;
}
void stagecreate(int glid[10][10],int *x,int *y){
int sx=0,sy=0;
int Color=0;
Color=GetColor(255,0,0);
for(sy=0;sy<10;sy++){
for(sx=0;sx<10;sx++){
if(glid[sy][sx]==1){
DrawBox(sx*20,sy*20,sx*20+20,sy*20+20,Color,TRUE);
}
}
}
}
void playerpoint(int glid[10][10],int *x,int *y){
int pcolor;
pcolor=GetColor(0,255,0);
char keybord[256];
GetHitKeyStateAll(keybord);
if(keybord[KEY_INPUT_W] !=0 ) *y-=2;
if(keybord[KEY_INPUT_S] !=0 ) *y+=2;
if(keybord[KEY_INPUT_D] !=0 ) *x+=2;
if(keybord[KEY_INPUT_A] !=0 ) *x-=2;
if(glid[*x/10][*y/10]==1 || glid[*x/10][(*y+20)/10]==1) *x+=2;
if(glid[(*x+20)/10][*y/10]==1 || glid[(*x+20)/10][(*y+20)/10]==1) *x-=2;
if(glid[*x/10][*y/10]==1 || glid[(*x+20)/10][*y/10]==1)*y+=2;
if(glid[*x/10][(*y+20)/10]==1 || glid[(*x+20)/10][(*y+20)/10]==1)*y-=2;
DrawBox(*x,*y,*x+20,*y+20,pcolor,TRUE);
}