我学习蟒蛇*\(^o^)/*
简单的pygame的动画口吃
我使用Pygame
得出一个简单的跳动框窗口。除了一个小小的烦恼之外,一切似乎都正常运作。它不断结巴!我不知道什么可能导致口吃。我认为这可能是滞后的,所以我实施了一个固定的时间步骤来让循环赶上,但这没有效果。
#--- initialize pygame window ---#
import pygame
import time
pygame.init()
size = (1200,500)
screen = pygame.display.set_mode(size, pygame.RESIZABLE)
fps = 60
#--- define color palette ---#
black = (0,0,0)
white = (255,255,255)
#--- define the player ---#
class player:
def __init__(self,screen,surface, color):
self.speed = 3
self.direction_x = 1
self.direction_y = 1
self.screen = screen
self.surface = surface
self.rect = self.surface.get_rect()
self.color = color
def set_pos(self, x,y):
self.rect.x = x
self.rect.y = y
def advance_pos(self):
screen_width, screen_height = screen.get_size()
if self.rect.x + self.rect.width > screen_width or player1.rect.x < 0:
player1.direction_x *= -1
player1.speed = 3
elif player1.rect.y + player1.rect.height > screen_height or player1.rect.y < 0:
player1.direction_y *= -1
player1.speed = 3
else:
player1.speed -= 0.001
self.rect.x += self.speed * self.direction_x
self.rect.y += self.speed * self.direction_y
def draw(self):
pygame.draw.rect(self.surface, self.color, [0,0,self.rect.width,self.rect.height])
def blit(self):
screen.blit(self.surface, self.rect)
player1 = player(screen, pygame.Surface((50,50)), white)
player1.set_pos(50,50)
player1.draw()
#--- define game variables ---#
previous = time.time() * 1000
lag = 0.0
background = black
done = False
#--- game ---#
while not done:
#--- update time step ---#
current = time.time() * 1000
elapsed = current - previous
lag += elapsed
previous = current
#--- process events ---#
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
break
if event.type == pygame.VIDEORESIZE:
screen = pygame.display.set_mode((event.w, event.h), pygame.RESIZABLE)
#--- update logic ---#
while True:
player1.advance_pos()
lag -= fps
if lag <= fps:
break
#--- draw to screen ---#
screen.fill(background)
player1.blit()
pygame.display.update()
pygame.time.Clock().tick(fps)
你已经采取了看看[这里](http://gamedev.stackexchange.com/questions/102586/locking-the-frame-rate-in-pygame)链接?那里提供的答案有一些有用的建议。如果你正好需要60 fps,你需要vsync,我不确定pygame提供什么,除非你使用pyopengl来进行pygame渲染。 – CodeSurgeon
我不知道PyOpenGL。谢谢! – Jace
从头学习OpenGL可能会非常具有挑战性,如果您之前没有使用它。如果可以帮助,我可以发布一个演示,复制你已经使用pygame和pyopengl编写的内容。 – CodeSurgeon