【发布时间】:2018-05-20 18:50:56
【问题描述】:
我正在 pygame 上制作一个小型测试游戏,您需要在屏幕上飞行飞机而不触及窗口边界,否则游戏将关闭。在我添加边界代码之前,我能够让飞机的精灵在它向左或向右飞行时发生变化,向各自的方向倾斜。现在,虽然“碰撞边界”代码与精灵代码无关,但平面只保留在它的一个初始精灵中并且不会改变(它仍然移动并且边界代码工作正常,但精灵本身不会改变) .
这是我的代码:
def game_loop():
x = display_width * 0.45
y = display_height * 0.8
x_change = 0
accel_x = 0
y_change = 0
accel_y = 0
max_speed_x = 2.5
max_speed_y = 2.5
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
elif event.type == pygame.KEYDOWN:
if event.key in (pygame.K_LEFT, pygame.K_a):
accel_x = -.2
img = pygame.image.load('PocketFlyer3.png')
img = pygame.transform.scale(img, (32, 32))
elif event.key in (pygame.K_RIGHT, pygame.K_d):
accel_x = .2
img = pygame.image.load('PocketFlyer2.png')
img = pygame.transform.scale(img, (32, 32))
if event.key in (pygame.K_UP, pygame.K_w):
accel_y = -.2
elif event.key in (pygame.K_DOWN, pygame.K_s):
accel_y = .2
elif event.type == pygame.KEYUP:
if event.key in (pygame.K_LEFT, pygame.K_RIGHT, pygame.K_a, pygame.K_d):
accel_x = 0
img = pygame.image.load('PocketFlyer1.png')
img = pygame.transform.scale(img, (32, 32))
if event.key in (pygame.K_UP, pygame.K_DOWN, pygame.K_w, pygame.K_s):
accel_y = 0
#accel script for X
x_change += accel_x
if abs(x_change) >= max_speed_x:
x_change = x_change/abs(x_change) * max_speed_x
if accel_x == 0:
x_change *= 0.92
x += x_change
#accel script for Y
y_change += accel_y
if abs(y_change) >= max_speed_y:
y_change = y_change/abs(y_change) * max_speed_y
if accel_y == 0:
y_change *= 0.92
y += y_change
display.fill(skyblue)
plane(x,y)
if x > display_width - plane_width or x < 0 or y > display_width - plane_width or y < 0:
gameExit = True
pygame.display.update()
clock.tick(60)
平面和游戏窗口的宽度在此提取之前定义;这个小摘录也没有遗漏什么太重要的东西。 (代码缩进的细微差别不是问题,只是发布此问题时发生的事情)
【问题讨论】:
-
请发minimal, complete and verifiable example,否则我们对调试无能为力。