【发布时间】: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