アクションゲームにおけるブロックとの当たり判定
Posted: 2011年5月04日(水) 17:18
初めまして。アクションゲームを作っているのですが、自キャラとブロックの当たり判定と位置補正がどうも上手くいきません。
ブロックはオブジェクトにして、テキストファイルから生成する場所を読み込み生成するという方法をとっています。
以下、当たり判定部分のソースです。
大体こんな感じです。問題はブロックの端で、ブロックの端でジャンプして着地するとめり込みすぎて上から当たっても内積結果が横から当たったと出てしまい、自キャラが横に補正されてしまうことです。(ブロックの左端に立ってジャンプ、着地すると左から当たったと判定されてしまい、自キャラは左に補正される)Y軸方向への速度による判定など試してみましたが解決しません。何かいい方法は無いでしょうか?よろしくお願いします。
ブロックはオブジェクトにして、テキストファイルから生成する場所を読み込み生成するという方法をとっています。
以下、当たり判定部分のソースです。
if(myChar.left < block.right && myChar.right > block.left)
{
if(myChar.top < block.bottom && myChar.bottm > block.top)
{
D3DXVECTOR3 PB = block.pos - myChar.pos; // 自キャラ->壁ベクトル
D3DXVec3Normalize(&PB, &PB); // PBベクトルを正規化
D3DXVECTOR3 right = D3DXVECTOR3(1, 0, 0); // 右向きのベクトル
float dot = D3DXVec3Dot(&PB, &right); // 内積計算
if(cos(D3DXToRadian(135)) <= dot && dot <= cos(D3DXToRadian(45))) // 上または下から当たった
{
if(myChar.pos.y > block.pos.y) // 上から当たった
{
// 上に位置補正
}
else // 下から当たった
{
// 下に位置補正
}
}
else if(cos(D3DXToRadian(45)) < dot && dot <= cos(D3DXToRadian(0))) // 左から当たった
{
// 左に位置補正
}
else // 右から当たった
{
// 右に位置補正
}
}
}