所以我是python的新手,我正试图通过编写一个小型汽车游戏来学习pygame模块。 游戏的“引擎”是基于滚动的背景,当用户按下“向上”键时,背景会向下移动
我试图使汽车减速(当用户释放“向上”键时),而不是立即停止。 因此,我尝试使用float for loop(使用numpy模块)将背景移动的速度从5降低到0乘以-0.1,但它不能正常工作。 实际情况是,当我释放“向上”键时,游戏会冻结一秒钟,然后背景会不平稳地向下移动几个像素
这是我的代码,希望你能帮我解决:
import pygame
import numpy
pygame.init()
clock = pygame.time.Clock()
run = True
# screen & bg setting
wnw = 500
wnh = 700
wn = pygame.display.set_mode((wnw, wnh))
bgcolor = (70, 190, 255)
bg = pygame.image.load('road.jpg')
bgy = 0
bgy2 = -bg.get_height()
# loading objects
class Car():
sprite = pygame.image.load('car.gif')
w = 100
h = 100
x = 200
y = 350
ver_spd = 5
hor_spd = 2
car = Car()
def drawbg():
wn.blit(bg, (0, bgy))
wn.blit(bg, (0, bgy2))
drawbg()
while run:
clock.tick(60)
# keys binding
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
if car.x + car.hor_spd > 0:
drawbg()
car.x -= car.hor_spd
if keys[pygame.K_RIGHT]:
if car.x + car.hor_spd < wnw - car.w:
drawbg()
car.x += car.hor_spd
if keys[pygame.K_UP]:
if car.y - car.ver_spd > 0:
bgy, bgy2 = bg_movement(bgy, bgy2, car.ver_spd)
def bg_movement(bgy, bgy2, spd):
drawbg()
bgy += float(spd)
bgy2 += float(spd)
if bgy > bg.get_height():
bgy = -bg.get_height()
if bgy2 > bg.get_height():
bgy2 = -bg.get_height()
return bgy, bgy2
for event in pygame.event.get():
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
for i in numpy.arange(5.0, 0.0, -0.1):
bgy, bgy2 = bg_movement(bgy, bgy2, float(i))
wn.blit(car.sprite, (car.x, car.y))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
print(event)
pygame.quit()
首先^{} 获取所有消息并将它们从队列中删除。因此,第一个或第二个循环都会得到一个事件,但两个循环都不会得到所有事件。这导致一些事件似乎被遗漏了。
在应用程序中实现1个事件循环
一旦UP被释放,就必须设置
decelerate
状态。减少变量并按每帧中的量向前移动care,只要decelerate > 0
:相关问题 更多 >
编程相关推荐