我的while循环只在光标在屏幕内移动时保持精灵的移动。我试着重组一些屏幕.blits以及显示.更新()和显示.flip(). 我似乎不明白为什么角色在一个像素的变化后停止,而不是像我想要的那样继续。在
background_image = 'Terrain_Grass_First.png'
import pygame, sys
from pygame.locals import *
pygame.init()
pygame.display.set_caption('Hans')
screen_width = 600
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height),0,32)
pygame.mouse.set_visible(False)
sprite = pygame.image.load('Hans_front_still.png').convert_alpha()
x,y = (0,0)
movex, movey = (0,0)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
if event.key == K_w:
y = -1
elif event.key == K_a:
x = -1
elif event.key == K_s:
y = +1
elif event.key == K_d:
x = +1
elif event.type == KEYUP:
if event.key == K_w:
y = 0
elif event.key == K_a:
x = 0
elif event.key == K_s:
y = 0
elif event.key == K_d:
x = 0
movex += x
movey += y
screen.fill((0,0,0))
screen.blit(sprite,(movex,movey))
pygame.display.flip()
唯一的问题是你的压痕!在
底部的第五行和第六行缩进错误,需要删除它们。在
而且很管用
循环在^{} 上阻塞。在
你不会安排任何你自己的活动。在
所以,在操作系统有事件(鼠标移动、重画等)给你之前,你什么都不做。在
而且,即使您修复了这个问题,您也会在每个事件中调用
movex += x
一次。所以,当操作系统向你抛出大量事件时,你的精灵会疯狂地在屏幕上快速移动,但当事件发生得更慢时,它会慢慢地爬行。那几乎不是你想要的。在解决这两个问题的一个简单方法就是安排自己的活动。例如,使用^{} ,您可以确保每隔250毫秒就得到一个事件,并且您只能在这些事件上移动精灵。例如:
另一种选择是用固定的帧速率设计游戏。在
下面是一个简单的例子:
^{pr2}$现在你可以每5帧移动一次。在
一个实际的例子必须处理丢失的帧、队列中太多的事件、在}之间进行适当的选择,等等
wait
和{但在大多数情况下,我会选择带有计时器的事件驱动版本,而不是固定帧速率版本,尤其是如果你已经在这条线上走下去的话。在
相关问题 更多 >
编程相关推荐