動きが変になる と 接触判定がおかしい
Posted: 2012年10月08日(月) 23:30
作っていたゲームがよくわからない挙動になったので質問させていただきます。
・動きが変
マウスポインタの方向に常にキャラクターが向いている状態で、キャラクターから見て前後左右の方向WASDで動くように作ったのですが動画のようになってしまいます。
期待値は、「マウスポインタを中心に回り続ける」、「マウスポインタから離れる・近づく」です。
・接触判定がおかしい
接触判定に円同士の距離判定を使用しているのですが、半径が低い時には問題がなかったのですが半径が大きくなると逆にとれなくなりました。
動画では丸い青い円が接触判定です。
武器の設定範囲を20、兵士の取得範囲を20した時に取得できなくなりました。
[youtube][/youtube]
定数です。
引数(Direction)には定数を入力します。
Soldier.Move(FRONT);
そして、円同士の接触判定方法です。
動画内では兵士と武器のそれぞれがもつCCircleインスタンスを引数に渡し、結果をブーリアンで返します。
ブレークポイントで追いかけたのですが、値の変更は確認できませんでした。
次の動画は、武器の設定範囲を5、兵士の取得範囲を10にした時の動画です。
取得範囲を狭くするとなぜか取得できるようになります。
[youtube][/youtube]
・動きが変
マウスポインタの方向に常にキャラクターが向いている状態で、キャラクターから見て前後左右の方向WASDで動くように作ったのですが動画のようになってしまいます。
期待値は、「マウスポインタを中心に回り続ける」、「マウスポインタから離れる・近づく」です。
・接触判定がおかしい
接触判定に円同士の距離判定を使用しているのですが、半径が低い時には問題がなかったのですが半径が大きくなると逆にとれなくなりました。
動画では丸い青い円が接触判定です。
武器の設定範囲を20、兵士の取得範囲を20した時に取得できなくなりました。
[youtube][/youtube]
定数です。
const double FRONT =0;
const double BACK =PI;
const double LEFT =PI/2;
const double RIGHT =-PI/2;
const double FRONTLEFT =PI/4;
const double FRONTRIGHT =-PI/4;
const double BACKLEFT =PI*3/4;
const double BACKRIGHT =-PI*3/4;
Soldier.Move(FRONT);
void CSoldier::Move(double Direction){
PosX+=cos(Angle+Direction)*WalkSpeed;
PosY-=sin(Angle+Direction)*WalkSpeed;
Body->SetPosX(PosX);
Body->SetPosY(PosY);
if(ContactList->ContactCheck(Body)){//接触チェック
//なにかにあたってたらやめる
PosX-=cos(Angle+Direction)*WalkSpeed;
PosY+=sin(Angle+Direction)*WalkSpeed;
Body->SetPosX(PosX);
Body->SetPosY(PosY);
}
}
動画内では兵士と武器のそれぞれがもつCCircleインスタンスを引数に渡し、結果をブーリアンで返します。
ブレークポイントで追いかけたのですが、値の変更は確認できませんでした。
bool CContactList::JudgeCircleCircle(CCircle* tmpCircle1,CCircle* tmpCircle2){
return (tmpCircle1->GetPosX()-tmpCircle2->GetPosX())*(tmpCircle1->GetPosX()-tmpCircle2->GetPosX()) +
(tmpCircle1->GetPosY()-tmpCircle2->GetPosY())*(tmpCircle1->GetPosY()-tmpCircle2->GetPosY()) <=
(tmpCircle1->GetRadius()-tmpCircle2->GetRadius())*(tmpCircle1->GetRadius()-tmpCircle2->GetRadius());
}
取得範囲を狭くするとなぜか取得できるようになります。
[youtube][/youtube]