그래서 기본 스프라이트()와 샤프트 용 별도 스프라이트 ()가있는 터렛 유형 건이 있습니다. 샤프트는베이스 뒤쪽으로 그려지고 마우스 위치를 향하여 회전합니다. 샤프트의 각도는
_turretAngle
으로 저장됩니다.Monogame/XNA 건 총알 발사 마우스
글 머리 기호를 올바르게 배치하려고하면 내 문제가 발생합니다. 문제의 총알 ()은 샤프트의 끝에서 항상 올바르게 기울어 져야하며 물론 올바른 방향으로 발사해야합니다.
총알을 비스듬히하려면 간단히 _turretAngle
을 사용하고 방향은 new Vector2(-Math.Cos(_turretAngle), -Math.Sin(_turretAngle));
이지만 초기 위치를 올바르게 가져올 수 없습니다. (상기 터릿의 각도에 따라) 행 어딘가에 위치하는 탄 올바르게 위치되고 너무 가까운
int i = _bullets.Count - 1;
Bullet b = _bullets[i];
b.SetAngle(_turretAngle);
float cos = (float)Math.Cos(_turretAngle);
float sin = (float)Math.Sin(_turretAngle);
b.SetDirection(new Vector2(-cos, -sin));
var posX = (Position.X - (Shaft.Width * cos) - (b.Width * cos)) + (Width/2) - ((b.Width/2) * cos);
var posY = Position.Y - (Shaft.Height * sin) - (b.Height * sin);
b.SetPosition((int)posX, (int)posY);
b.BulletState = Bullet.State.Active;
하지만, 대신에, 상기 샤프트에 위치가 아닌 경우 다음과 같이
는 I 현재 그것을 가지고 포대보다 5-15 픽셀 앞.
내가 그것을 표시 할 방법 :
는 현재 표시 방법
내가 여기에 니트 - 까다롭게 될 수 알지만 ' d는 수학이 어떻게 잘못되었는지 알고 싶어합니다.
누락 된 정보가있을 수 있다는 것을 알고 있습니다. 아무 것도 추가해야하는지 알려주세요.
내가 제안을 이 총알을 turet와 같은 위치에 산란시키고, 같은 회전 행렬을 적용한 다음, y 방향으로 포대의 높이 + 총알의 높이와 같은 대상을 움직여야하는 이동 행렬을 적용합니다. 먼저 회전 행렬을 적용한 다음 객체를 이동해야하는 이유입니다. 그것은 하나의 픽셀 간격과도 완벽하게 정렬되어야합니다. –