繁体   English   中英

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

[英]2D Zoom: Adjusting Distances Between Sprites

我正在尝试为基本游戏实现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);

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

一般解释:

您将希望通过与缩放小精灵的尺寸相同的因子来缩放小精灵的x / y坐标。 并且最接近“缩放点”的角应该是缩放的锚点。 [表示如果放大到精灵的x / y坐标,就足以缩放宽度/高度。 但是,如果要放大到小精灵的中心,x / y坐标也将更改,因为它们将被推向屏幕边缘。

但是大多数时候,您不应该通过更改子图形的实际世界位置/尺寸来处理缩放/变换。 大多数引擎使用“摄像机”或“视口”将对象的世界坐标投影到屏幕坐标。 意味着它们在渲染时缩放/变换所有图像,而世界坐标保持不变。 您应该使用与引擎中等效的东西。

例如,给定(1,1)处尺寸为1x1的正方形,如果我们使用坐标原点作为锚点放大2倍(有效地使所有内容加倍),则最终得到的正方形为(2 ,2),并且屏幕空间的尺寸为2x2。

以2倍放大的正方形

特定于您的给定代码段:

为什么要在此行中缩放比例级别?

sprite.x *= (zoom_level * zoom_level); 

似乎是错误的,确定要简单吗

sprite.x *= zoom_level;

还不够吗 据我所知,这只会缩放子画面的位置,而不会缩放其尺寸,您可能也应该缩放其宽度/高度。 OTOH,如果您的引擎已经可以处理摄影机/视口缩放比例,则您可能根本不想更改精灵的x / y坐标,否则您可能会对其进行两次转换。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM