从创意到像素:如何在 Python 中使用最小值和最大值实现摄像机视锥剔除

发布日期:2026-05-06 10:33:47   浏览量 :5
发布日期:2026-05-06 10:33:47  
5

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

在我们教程的第一部分中,我们学习了如何使用基本算术运算来对齐世界中的元素。今天,我们将迈出下一个合乎逻辑且实用的步骤。

当我们在基于网格(瓦片)地图的二维视频游戏中工作时,我们希望摄像机跟随玩家。但是,当玩家接近关卡边缘时会发生什么?如果没有适当的控制,摄像机会过度移动,显示出空白背景或窗口空间的“虚空”。

为了优雅地解决这个问题,我们使用一种称为限制或钳位(clamping)的数学技术。

空间挑战
假设我们有一个固定分辨率的屏幕,以及一个比该屏幕大得多的地图。

为了将角色居中,我们计算一个理想的偏移量(offset)。然而,这个偏移量可能会超出允许的范围。为了避免这种情况,我们将计算结果限制在摄像机在世界中可以取的最小值和最大值之间。

数学模型
为了限制摄像机的值,我们结合使用min()max()函数。我们应用的通用公式是:

最终偏移量 = max(下限, min(上限, 理想偏移量))

代码实现
在我们的脚本中,我们首先通过将单元格(瓦片)数量乘以其尺寸来计算地图的总像素大小:

# 地图的总宽度和高度(像素)
map_width_pixels = len(store.nivel_mapa[0]) * store.TILE_SIZE
map_height_pixels = len(store.nivel_mapa) * store.TILE_SIZE

一旦有了地图的大小,我们就确定偏移量的边界。例如,在 X 轴上,上限不能大于零(否则,我们会看到地图左侧的背景),而下限是通过用窗口宽度减去地图宽度得到的。

# X 轴摄像机偏移量的边界
max_offset_x = 0
min_offset_x = store.SCREEN_WIDTH - map_width_pixels

最后,我们计算将角色居中的理想位置,并应用数学限制函数:

# 将马里奥居中的理想摄像机位置
ideal_camera_x_offset = int(store.SCREEN_WIDTH / 2 - mari

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部