实现Cam的二维游戏引擎

2021-04-11 14:12:05 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我一直在用Python制作一个游戏,特别是PyGame module。一切都很顺利(除了Python的速度,对吗:P),我有一个很好的成就列表,但我刚刚遇到了。。。减速带。也许是座山。我还不确定。问题是:

How do I go about implementing a Camera with my current engine?

不过,这对你来说可能没有什么意义,所以让我解释一下我的current engine在做什么:我有一个用于所有图像的spritesheet。地图是由Tile对象的双数组组成的,它填满了显示屏(800x640)。该映射还包含对所有EntityParticles的引用。所以现在我想创建一个相机,这样地图对象可以比显示器大。为了做到这一点,我设计了一种摄像头,它可以跟踪玩家(玩家在屏幕中央)。我以前在游戏中见过这种实现,甚至读过其他一些类似的帖子,但我也需要知道我是否需要重新构造所有游戏代码才能在其中工作?我的第一次尝试是在播放器移动时让屏幕上的所有对象都移动,但我觉得有更好的方法来做到这一点,因为这会破坏碰撞检测等。在

所以,如果有人知道这类问题的任何好的参考资料,或者解决它的方法,我会全神贯注地听。。。呃。。眼睛。在

谢谢

2条回答
网友
1楼 ·

您可能会对this link感兴趣。在

本质上,您需要做的是区分“实际”坐标和每个对象的“显示”坐标。在

你要做的是使用游戏中每个实体的实际坐标来完成大部分工作。如果有帮助的话,想象一下你有一个巨大的屏幕,可以一次显示所有的东西,并按正常方式计算所有东西。如果还将摄影机设计为实体,则可能会有所帮助,以便可以像任何其他对象一样更新摄影机的位置。在

更新所有内容后,转到摄影机对象,确定窗口中可见的分片、对象、粒子等,并将它们的实际世界坐标转换为正确显示它们所需的像素坐标。在

如果这是正确的,你也可以做一些事情,如缩放或修改你的相机正在显示的图像,而不影响游戏。在

本质上,你想要在游戏性和物理逻辑/代码以及你的渲染/显示代码之间有一个非常明确的区别,这样你的游戏可以做任何它想做的事情,你可以渲染它,你想怎么渲染它,两者之间的交叉最小。在

好消息是,你可能不需要改变游戏本身的工作方式。坏消息是,你可能不得不重新编写你的渲染/绘图代码,这样所有的东西都是相对于摄影机绘制的,而不是相对于世界的。在

网友
2楼 ·

因为我无法查看您的代码,所以我无法评估此答案对您有多有用。在

我对侧滚动条、可移动地图等的处理方法是将所有的分幅块快速地放到游戏。表面跨越整个关卡/地图等的维度,或者至少是其中的一大块。这样的话,我只需要在一个已经准备好的帧上进行blit。在

不将整个x/y碰撞检测值保留在矩形/矩形中。更新主要是转移数字,不再是表面。在

如果您认为有用,请随时询问更多细节:)

相关问题