DX11 2D Game Programming
DX11_2020_0728_화_Collider Offset
HI2
2020. 7. 28. 16:24
200728_ColliderOffset.zip
1.64MB
1. Collider Offset 적용된 상태에서 Rotation 구현
더보기
void Plane::InitPlane()
{
quad = new Quad(L"Textures/airplane.png");
quad->pos = { WinWidth * 0.5f, WinHeight * 0.5f };
//
collider = new RectCollider(Vector2(100.0f, 100.0f), quad);
collider->SetOffset(Vector2(0, 100.0f));
//
InitBullets();
}
//////////////////////////////////////////////////////////////////////////////////////////
void Plane::Rotate()
{
float angleBefore = quad->angle;
float angleAfter = (MOUSE->GetMousePos() - quad->pos).Angle() - (PI * 0.5f);
quad->angle = angleAfter;
// 이전 angle을 저장하여 회전 이후 각 차이를 구한다
float theta = (angleAfter - angleBefore);
collider->RotateOffset(theta);
// dir(Vector2) : 총알 발사시 사용
dir = (MOUSE->GetMousePos() - quad->pos).Normal();
}
//////////////////////////////////////////////////////////////////////////////////////////
void Collider::RotateOffset(float theta)
{
offset.Rotate(theta);
}
//////////////////////////////////////////////////////////////////////////////////////////
void Vector2::Rotate(double angle)
{
Vector2 tmp{};
tmp.x = x * cos(angle) - y * sin(angle);
tmp.y = x * sin(angle) + y * cos(angle);
//
x = tmp.x;
y = tmp.y;
}