Atualmente, estou agrupando sprites e aplicando uma transformação de rotação no sorteio:
private void UpdateMatrix(ref Vector2 origin, float radians)
{
Vector3 matrixorigin = new Vector3(origin, 0);
_rotationMatrix = Matrix.CreateTranslation(-matrixorigin) * Matrix.CreateRotationZ(radians) * Matrix.CreateTranslation(matrixorigin);
}
Onde a origem é o ponto mais central do meu grupo de sprites. Aplico essa transformação a cada sprite no grupo.
Meu problema é que, quando ajusto o ponto de origem, todo o meu grupo de sprites se reposiciona na tela.
Como diferenciar o ponto de rotação usado na transformação da posição do grupo de sprites? Existe uma maneira melhor de criar essa matriz de transformação?
EDITAR
Aqui está a parte relevante da função 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);
}
}
Isso tudo funciona bem, novamente, o problema é que, quando uma rotação é definida e o ponto de origem é alterado, a posição do grupo de sprites é deslocada na tela.
Estou tentando descobrir uma maneira de ajustar o ponto de origem sem causar uma mudança de posição.
Edição 2 Neste momento, estou procurando soluções alternativas, pois isso não está funcionando. Alguém sabe uma maneira melhor de rotacionar um grupo de sprites no XNA? Preciso de um método que permita modificar o ponto de rotação (origem) sem afetar a posição do grupo de sprites na tela.
EDIT 3 Acho que se eu pudesse redefinir as coordenadas da tela para (0,0) na minha posição de sprite, isso essencialmente me permitiria reposicionar a origem sem movimento. Essencialmente, preciso de uma maneira de definir a posição / rotação atual e começar do zero. Alguém sabe se é possível fazer do meu sprite a nova origem da tela?
ORIGEM EM MOVIMENTO SEM ROTAÇÃO:
ORIGEM EM MOVIMENTO COM UMA ROTAÇÃO (observe como ela mudou para cima):