본문으로 바로가기

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;
}