【问题标题】:Why is my pygame game losing frames when displaying rects?为什么我的 pygame 游戏在显示矩形时会丢失帧?
【发布时间】:2019-06-13 01:14:19
【问题描述】:

我正在尝试编写一个简单的游戏,该游戏有一个玩家对象和一个使用循环创建它的楼层。我不知道为什么它的丢帧这么快。我有时钟以 60 fps 打勾,但很快降至 15 fps。提前致谢!

main.py

black = (0, 0, 0)
blue = (50, 60, 200)
white = (255, 255, 255)
font = pygame.font.Font(None, 30)

window = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Platformer")

gravity = -0.5

player = Player(400, 0)

level1 = [
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]


]

    for y in range(0, len(level1)):
        for x in range(0, len(level1[y])):
            if level1[y][x] == 1:
                blockList.append(Block(x*32, y*32))

    window.fill(blue)

    for block in blockList:
        block.render(window)

    player.x += moveX

    player.update(gravity, blockList)
    player.render(window)

    clock.tick(60)
        for x in range(0, len(level1[y])):
            if level1[y][x] == 1:
                blockList.append(Block(x*32, y*32))``` Im pretty sure thats where the error is...

【问题讨论】:

  • 您是否在每帧都对level1 进行此双循环?也许这可以在进入主循环之前移动到初始化部分。
  • 我该怎么做?对不起,我是 python 新手
  • 您需要编辑您的问题以包含整个代码 - 或至少包含主循环。如果没有大部分代码,就不可能提出更改建议。

标签: python macos pygame frame-rate


【解决方案1】:

这里有一个很好的学习点。优化代码的第一步是将不必要的数学排除在循环之外。正如评论中所建议的,如果您在每个帧计算中运行双循环,它可能会减慢您的速度。也许其他事情也是如此。

假设您的“1 级”块没有逐帧变化。因此,我们可以在您开始循环之前计算黑名单。

# make blocklist
level1= [[0,0, ... , 0],
              ...
         [1,1, ... , 1]]

blocklist = []
for y ...
  for x ...
    blocklist.append(...)

# now start your frame loop
while True:
  window.fill()
  for block in blocklist:
    ...
  clock.tick(60)

【讨论】:

  • 双循环是二次时间的一个例子。
  • 抱歉,stackoverflow 超级新手,甚至不知道如何正确格式化问题
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
相关资源
最近更新 更多