我有一张 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/