c# - 如何在 XNA (2D) 中制作滚动图?

标签 c# xna

我有一张 map ,在 5000*5000 的区域内包含许多对象。 我的屏幕尺寸是 800*600。

我怎样才能滚动我的 map ,我不想左右移动我所有的对象,我想让“相机”移动,但不幸的是我没有找到任何移动它的方法。

谢谢

最佳答案

我认为您正在寻找 SpriteBatch.Begin ( this overload ) 的 transformMatrix 参数。

您说您不希望对象 移动,但您希望相机 移动。但是,在最低级别,在 2D 和 3D 渲染中,没有“相机”的概念。渲染始终发生在同一区域 - 您必须使用转换将顶点/ Sprite 放入该区域。

如果你想要相机的效果,你必须通过向相反方向移动整个世界来实现它。

当然,您实际上并不存储移动的数据。您只需在渲染数据时应用偏移量。 Emartel 的回答让你为每个 Sprite 都这样做。然而,使用矩阵更简洁,因为您不必为每个 Draw 复制代码 - 您只需让 GPU 完成即可。

最后举个例子:假设您希望将相机放置在 (100, 200) 处。为此,将 Matrix.CreateTranslation(-100, -200, 0) 传递给 SpriteBatch.Begin

(根据 emartel 的回答,自己执行截锥体剔除可能是浪费时间,除非你的世界真的很大。有关性能注意事项的解释,请参见 this answer。)

关于c# - 如何在 XNA (2D) 中制作滚动图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13782321/

相关文章:

c# - RowEditEnding 事件获取空值

带有数组的 C# 结构

c# - 如何使流体阻力方程不依赖于帧速率

c# - 无需软盘即可获取本地驱动器

c# - Docker 无法执行,因为找不到应用程序或未安装兼容的 .NET SDK

C# mysql连接实践

c# - 为序列化/反序列化准备 XML 数据的正确方法是什么

c# - 如何将 "round"二维向量到最近的 15 度

c# - 不能使用 FileFormatException (?)

c# - XNA:如何测量按键按下的时间?