对于2D游戏,我有这些概念:
在插图中,您可以看到它们之间的关系以及最终结果应该是什么。
这是我的代码:(愚蠢到让它更容易阅读)
注1:这不是在画布上发生的,所以我不会使用画布翻译或旋转(即便如此,我也不认为它会使问题变得更容易)。
注2:物品和相机位置是中心坐标。
var sin = Math.sin(rotationRad);
var cos = Math.cos(rotationRad);
var difX = item.x - camera.x;
var difY = item.y - camera.y;
var offsetX = camera.width / 2;
var offsetY = camera.height / 2;
var view.x = (cos * difX) - (sin * difY) + _Ax + _Bx;
var view.y = (sin * difX) + (cos * difY) + _Ay + _By;
这应该通过以下方式计算项目的新位置:
我在这里尝试了几种不同的解决方案用于_A *和_B *,但它们都不起作用。
这样做的正确方法是什么,如果可能,解释是什么?
答案 0 :(得分:0)
首先从对象位置减去新的原点位置。然后,您可以通过旋转的反转来旋转它。新原点可以是视口左上角的摄像机位置。当然,如果你知道视口中心,它的左上角是通过减去它的一半尺寸来计算的。
像这样:
var topLeft = Camera.Position - Camera.Size / 2;
var newPosition = Object.Position - topLeft;
newPosition = Rotate(newPosition, -camera.Angle);
轮换非常简单:
rotatedX = x * cos(angle) - y * sin(angle)
rotatedY = y * cos(angle) + x * sin(angle)