То, что вы должны рассмотреть, это поддерживать постоянную (readonly
) смещение от вашего корабля для ракеты:
//non-rotated, where is the missile relative to the ship?
readonly Vector2 missileOffset = new Vector2(5.0f, 2.0f);
Это держит вещи в относительном пространстве корабля. Тогда вы можете просто преобразовать только смещение, а затем добавить это к позиции корабля:
//rotation of ship as quaternion
Quaternion rotation = Quaternion.CreateFromAxisAngle(Vector3.Backward, angle);
//the final position for the missile
Vector2 leftMissile = Vector2.Transform(missileOffset, rotation) + shipPosition;
Это доставит ракету в нужное место. Затем, предполагая, что вы используете SpriteBatch
, просто поверните корабль и ракету, передав угол в обе стороны:
batch.Begin();
batch.Draw(shipTex, shipPosition, null, Color.White, angle, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f);
batch.Draw(missileTex, leftMissile, null, Color.White, angle, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f);
batch.End();