Pygame 滚动背景延迟

2 投票
2 回答
1987 浏览
提问于 2025-04-17 12:23

在pygame中,我想要一个可以滚动的背景,这样玩家就可以在一个大区域内移动。我已经比较简单地实现了这个功能,但游戏运行得非常慢。

这是我一些代码的链接:http://pastebin.com/1EzDV7mc

我哪里做得不够好呢?我该怎么让它运行得更快呢?

2 个回答

0

接着junichiro说的,我找到一个网站,里面有他提到的信息,还有更多内容。

https://www.pygame.org/docs/tut/newbieguide.html

我不是说你是新手,其实我自己也从这个网站学到了很多,尽管我已经用pygame六年了。

另外,surface.convert()只适用于不透明的图片。要处理透明图片,应该用surface.convert_alpha(),这样就能处理所有类型的图片。我通常会写一个函数,这样每次加载图片的时候就不用重复输入一大堆代码。你可以用下面这两行代码:

def loadify(imgname):
    return pygame.image.load(imgname).convert_alpha()

这样我的游戏帧数从18提升到了30帧。

祝你好运!

2

请查看 PyGame新手指南

特别是:

  1. 使用 surface.convert() 方法。

  2. 最好使用“脏矩形”动画,只更新那些发生变化的屏幕部分,而不是整个屏幕。虽然我之前也用过全屏更新(这在整个屏幕不断滚动的游戏中是必须的),但在现代电脑上,只要对象不太多,其实也还不错。

在那个指南中没有提到的内容:

  1. 你应该争取达到每秒60帧(60fps),可以用 clock.tick(60) 来控制,但其实30帧也可以,CPU的负担会小一些。

  2. 如果你需要进行全屏更新来实现滚动效果,那就要么少用一些对象,要么不再使用PyGame,转而使用OpenGL。

  3. 你为什么用图像的中心点来绘制,而不是左上角?这是个错误吗?

  4. 通常情况下,存储大小属性时,应该分开存储宽度和高度,而不是用一个需要索引的列表。这样可以让你的代码更清晰。

撰写回答