【问题标题】:pygame pygame.display.update() function decreases fpspygame pygame.display.update() 函数降低 fps
【发布时间】:2014-11-12 13:55:01
【问题描述】:

我们正在用 python 制作一个小游戏,但是 pygame pygame.display.update() 函数存在一些问题。它显着降低了我们的 fps 速率(40.000 到 27),而我们只重绘了一个精灵。 (渲染背景和播放器无关紧要,不会掉更多)

是我们做错了什么,还是只是 python 没有那么快?

def render():
  screen.blit(background, (0,0))
  fred.draw()

  pygame.display.update(fred.pos)

FPS 28

def render():
  #screen.blit(background, (0,0))
  fred.draw()

  pygame.display.update(fred.pos)

FPS 31

如您所见,从渲染过程中移除背景只会增加一点 fps。但是当只重绘 1 或 2 个精灵时,仍然从 40.000 下降到 28?

完整代码:

import pygame, sys, time
from pygame.locals import *

pygame.init()

size = width, height = 1024, 500
fps = 60
speed = 10

beginTime = time.clock()

screen = pygame.display.set_mode(size)
background = pygame.image.load('/pathtosprite/background.png').convert()

class Fred(object):
  strength = 0
  pos = 0
  sprite = 0

  def __init__(self, strength, position):
    self.sprite = pygame.image.load('/pathtosprite/fred.png').convert()
    self.strength = strength
    self.pos = pygame.Rect(10, 10, position[0], position[1])

  def draw(self):
    screen.blit(self.sprite, self.pos)

  def walk(self, direction):
    self.pos = self.pos.move(direction)

def tick(): #doet de berekeningen per stap
  lastTime = time.clock()
  keys = pygame.key.get_pressed()

  if keys[K_UP]:
    fred.walk([0,-speed])
  if keys[K_DOWN]:
    fred.walk([0,speed])
  if keys[K_RIGHT]:
    fred.walk([speed,0])
  if keys[K_LEFT]:
    fred.walk([-speed,0])

  render()


def render(): #updatet het scherm
  screen.blit(background, (0,0))
  fred.draw()

  pygame.display.update(fred.pos)

def run(): #zorgt dat fps gehandhaafd blijft
  startTime = time.clock()
  ticks = 0
  frames = 0

  while 1:
    for event in pygame.event.get():
      if event.type == QUIT:
        sys.exit()
    now = time.clock()
    if now-startTime > 1/fps:
      ticks += 1
      print(ticks/(now-beginTime))
      startTime = now
      tick()

fred = Fred(10000000, (10, 10))    
run()

【问题讨论】:

    标签: python pygame frame-rate


    【解决方案1】:

    from pygame.locals import * 表示 time 指的是 pygame 的时间模块,而不是标准库的时间模块。

    【讨论】:

    • 这个答案不正确。你必须写 from pygame import * 来导入 time 模块(请不要这样做)。
    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 2019-06-12
    • 1970-01-01
    • 2014-06-26
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多