・動きが変
マウスポインタの方向に常にキャラクターが向いている状態で、キャラクターから見て前後左右の方向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]