マリオ風横スクロールアクションゲームをC/C++で作成中なのですが、
ブロックとの当たり判定で思ったようにプレイヤーキャラが壁やブロックで止まらなかったり、
プレイヤーの位置が急に変わったりして困っています。
誰か助けてください。
当たり判定部分のソースを載せます。
typedef struct HITBG{
int x;
int y;
int width;
int height;
int kind;
}HITBG;
class CBG{
public:
HITBG HBG[14][16];
//void CBG::HitCheck()メンバ関数、引数にはプレイヤーキャラを入れる
void HitCheck(int &x,int &y,int width,int height)
{
int i,j;
for(i=0;i<14;i++)
{
for(j=0;j<16;j++)
{
if(HBG[j].kind!=5)//背景番号5番は空
{
if(y+height>=HBG[j].y &&
y<=HBG[j].y+32)//チップは32ドット
{
if(x+width>=HBG[j].x &&
x+width<=HBG[j].x)
{
//左に接触
x=HBG[j].x+width;
}
if(x<=HBG[j].x+32 &&
x>=HBG[j].x+32)
{
//右に接触
x=HBG[j].x;
}
if(x+width>=HBG[j].x &&
x<=HBG[i][j].x+32)
{
if(y+height>=HBG[i][j].y &&
y+height<HBG[i][j].y)
{
//下
y=HBG[i][j].y+height;
}
if(y>=HBG[i][j].y+32 &&
y<HBG[i][j].y+32)
{
//上
y=HBG[i][j].y-32;
if(HBG[i][j].kind==2)
{
}
}
}
}
}
}
}
}
};
CBG BG;
void Init()//DxLib_Init()後に呼ぶ関数
{
//省略
int i,j;
for(i=0;i<14;i++)
{
for(j=0;j<16;j++)
{
BG.HBG[i][j].kind=BGTbl[i][j];
BG.HBG[i][j].x=j*32;
BG.HBG[i][j].y=i*32;
BG.HBG[i][j].width=32;
BG.HBG[i][j].height=32;
}
}
}
