Tôi hiện đang nhóm các sprite lại với nhau, sau đó áp dụng chuyển đổi xoay vòng khi vẽ:
private void UpdateMatrix(ref Vector2 origin, float radians)
{
Vector3 matrixorigin = new Vector3(origin, 0);
_rotationMatrix = Matrix.CreateTranslation(-matrixorigin) * Matrix.CreateRotationZ(radians) * Matrix.CreateTranslation(matrixorigin);
}
Trong đó nguồn gốc là điểm trung tâm của nhóm các họa sĩ của tôi. Tôi áp dụng chuyển đổi này cho mỗi sprite trong nhóm.
Vấn đề của tôi là khi tôi điều chỉnh điểm gốc, toàn bộ nhóm sprite của tôi sẽ tự định vị lại trên màn hình.
Làm thế nào tôi có thể phân biệt điểm quay được sử dụng trong chuyển đổi, từ vị trí của nhóm sprite? Có cách nào tốt hơn để tạo ma trận biến đổi này không?
BIÊN TẬP
Đây là phần có liên quan của hàm Draw ():
Matrix allTransforms = _rotationMatrix * camera.GetTransformation();
spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, null, null, null, allTransforms);
for (int i = 0; i < _map.AllParts.Count; i++)
{
for (int j = 0; j < _map.AllParts[0].Count; j++)
{
spriteBatch.Draw(_map.AllParts[i][j].Texture, _map.AllParts[i][j].Position, null, Color.White, 0, _map.AllParts[i][j].Origin, 1.0f, SpriteEffects.None, 0f);
}
}
Tất cả điều này hoạt động tốt, một lần nữa, vấn đề là khi một vòng quay được đặt và điểm gốc được thay đổi, vị trí của nhóm sprite được bù trên màn hình.
Tôi đang cố gắng tìm ra một cách để điều chỉnh điểm gốc mà không gây ra sự thay đổi vị trí.
EDIT 2 Tại thời điểm này, tôi đang tìm cách giải quyết vì điều này không hiệu quả. Có ai biết một cách tốt hơn để xoay một nhóm các sprite trong XNA không? Tôi cần một phương pháp cho phép tôi sửa đổi điểm xoay (gốc) mà không ảnh hưởng đến vị trí của nhóm sprite trên màn hình.
EDIT 3 Tôi nghĩ rằng nếu tôi có thể đặt lại tọa độ màn hình thành (0,0) tại vị trí sprite của mình, về cơ bản nó sẽ cho phép tôi đặt lại vị trí gốc mà không cần di chuyển. Tôi về cơ bản cần một cách để thiết lập vị trí / xoay hiện tại, sau đó bắt đầu từ đầu. Có ai biết nếu có thể làm cho sprite của tôi nguồn gốc màn hình mới?
CHUYỂN ĐỘNG GỐC KHÔNG CÓ ROTATION:
CHUYỂN ĐỘNG GỐC VỚI ROTATION (chú ý cách nó dịch chuyển lên trên):