我正在尝试为基本游戏实施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);
答案 0 :(得分:1)
很难给出正确的答案,因为没有给出引擎/平台/语言。
您需要按照想要缩放其尺寸的相同因子缩放精灵的x / y坐标。最靠近你"缩放点的角落#34;应该是缩放的锚点。 [意思是如果你放大你的精灵的x / y坐标,它就足以缩放宽度/高度。但是如果你想放大一个精灵的中心,x / y坐标也会改变,因为它们会被推向屏幕的边缘。]
但是大多数时候你不应该通过改变精灵来处理变焦/变换。实际的世界位置/维度。大多数发动机使用的是#34;相机"或者" Viewport"将对象的世界坐标投影到屏幕坐标。这意味着他们在渲染时缩放/转换所有图像,保持世界坐标不变。你应该使用与引擎相同的东西。
作为一个例子,给定(1,1)的方形,尺寸为1x1,如果我们使用坐标原点作为锚点放大2倍(有效地加倍),我们最终会得到一个正方形渲染at(2,2)和屏幕空间中2x2的尺寸。
为什么要在这一行中调整缩放级别?
sprite.x *= (zoom_level * zoom_level);
似乎是错的,你确定是一个简单的
sprite.x *= zoom_level;
还不够吗? 据我所知,这只会缩放精灵的位置而不是它们的尺寸,你也应该缩放它们的宽度/高度。 OTOH,如果您的引擎已经处理了相机/视口缩放,您可能根本不想更改精灵的x / y坐标,否则您可能会对它们进行双重转换。
无论如何,我建议您阅读特定于您的引擎的文档/教程。