2D缩放:调整精灵之间的距离

时间:2015-08-17 20:27:36

标签: 2d zoom game-engine scaling

我正在尝试为基本游戏实施2d变焦。我有图像缩放。我还有一个基本的变焦有时会失败。就像...它几乎看起来合法,直到你开始大量测试。有时当我放大并移动两个彼此靠近的物体时,我会向后缩小,现在物体会重叠,尽管放大的版本会另有说明。

zoom_level从1开始。

zoomIn():
    zoom_level *=1.2;
    for sprite in sprites:
        //make sprites 1.2 times their current size 
        sprite.x *= (zoom_level * zoom_level);
        sprite.y *= (zoom_level * zoom_level);

1 个答案:

答案 0 :(得分:1)

很难给出正确的答案,因为没有给出引擎/平台/语言。

以一般方式解释:

您需要按照想要缩放其尺寸的相同因子缩放精灵的x / y坐标。最靠近你"缩放点的角落#34;应该是缩放的锚点。 [意思是如果你放大你的精灵的x / y坐标,它就足以缩放宽度/高度。但是如果你想放大一个精灵的中心,x / y坐标也会改变,因为它们会被推向屏幕的边缘。]

但是大多数时候你不应该通过改变精灵来处理变焦/变换。实际的世界位置/维度。大多数发动机使用的是#34;相机"或者" Viewport"将对象的世界坐标投影到屏幕坐标。这意味着他们在渲染时缩放/转换所有图像,保持世界坐标不变。你应该使用与引擎相同的东西。

作为一个例子,给定(1,1)的方形,尺寸为1x1,如果我们使用坐标原点作为锚点放大2倍(有效地加倍),我们最终会得到一个正方形渲染at(2,2)和屏幕空间中2x2的尺寸。

a square zoomed in by a factor of 2

特定于您给定的代码段:

为什么要在这一行中调整缩放级别?

sprite.x *= (zoom_level * zoom_level); 

似乎是错的,你确定是一个简单的

sprite.x *= zoom_level;

还不够吗? 据我所知,这只会缩放精灵的位置而不是它们的尺寸,你也应该缩放它们的宽度/高度。 OTOH,如果您的引擎已经处理了相机/视口缩放,您可能根本不想更改精灵的x / y坐标,否则您可能会对它们进行双重转换。

无论如何,我建议您阅读特定于您的引擎的文档/教程。