我爲自上而下的遊戲創建了2D相機(代碼如下)。當玩家位置接近0.0x和0.0y時,一切正常。XNA 2D相機鬆動精度
不幸的是,隨着距離的增加,轉換似乎會出現問題,大約在0.0x 30e7y(即3000萬y),當玩家移動時相機開始顫抖(相機在每個玩家結束時更新玩家位置更新)在距離非常遠的地方,十億甚至十億的相機甚至不會跟蹤玩家,因爲我猜測矩陣中的任何錯誤都會被放大得太多。
我的問題是:矩陣中是否存在問題,或者是極端數字的標準行爲。
攝像頭變換法:
public Matrix getTransform()
{
Matrix transform;
transform = (Matrix.CreateTranslation(new Vector3(-position.X, -position.Y, 0)) *
Matrix.CreateRotationZ(rotation) * Matrix.CreateScale(new Vector3(zoom, zoom, 1.0f)) *
Matrix.CreateTranslation(new Vector3((viewport.Width/2.0f), (viewport.Height/2.0f), 0)));
return transform;
}
相機更新方法:
這要求給出的目標位置,它的ID,它返回一個基本Vector2,然後將其設置爲攝像頭的位置。
if (camera.CameraMode == Camera2D.Mode.Track && cameraTrackObject != Guid.Empty)
{
camera.setFocus(quadTree.getObjectPosition(cameraTrackObject));
}
如果任何人可以看到一個錯誤或啓發我爲什麼矩陣鬥爭,我將不勝感激。
這很奇怪。我猜這是非常高的數字(以百萬計)需要?因爲我的第一個建議是如果可能的話減少這個。 – tjheslin1
我已經找到了解決辦法,並在下面發佈了錯誤原因,感謝您的評論:D – user3170345