基本上我试图为我正在制作的小游戏添加一些边界,我有一个只能从左到右移动的精灵,我试图阻止它从游戏窗口移开,如果精灵到达他们可以不再进一步的边缘,然后可以向相反的方向前进。 我目前的代码:
tankSprite = pygame.image.load('Sprites/Tank.png') #fixed apostrophe
tankSprite_width = 28
def tank(x,y):
gameWindow.blit(tankSprite, (x,y))
def game_loop():
x = (display_width * 0.45)
y = (display_height * 0.8)
x_change = 0
gameExit = False
gameMove = True
while not gameExit and gameMove == True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = False
if event.type ==pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -5
if event.key == pygame.K_RIGHT:
x_change = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFTor event.key == pygame.K_RIGHT:
x_change = 0
x += x_change
gameWindow.fill(white)
tank(x,y)
if x > display_width - tankSprite_width or x < 0:
gameMove = False
elif x < display_width - tankSprite_width or x > 0:
gameMove = True
pygame.display.update()
clock.tick(60)
game_loop()
pygame.quit()
quit()
我的当前代码部分有效,当精灵到达边缘时,解决方案自行关闭而不是让我回去。如果我删除:
pygame.quit()
quit()
然后精灵停止了,我无法将其移回。在一个项目中,我做了一段时间,我使用了类似的东西:
if event.key == pygame.K_LEFT and sprite.x < 590:
sprite.x += 5
上面的代码从我能记住的内容中运作良好,但我现在似乎无法弄清楚我的项目,有人能帮帮我吗? 我希望这样做,以便精灵不能越过屏幕边框,当玩家到达边界时,他们要么停留,要么向相反的方向返回。感谢
P.S。抱歉狡猾的格式
答案 0 :(得分:1)
只需拆分你的if语句并分别检查每个方向的条件:
tankSprite = pygame.image.load('Sprites/Tank.png')
tankSprite_width = 28
def tank(x,y):
gameWindow.blit(tankSprite, (x,y))
def game_loop():
x = (display_width * 0.45)
y = (display_height * 0.8)
x_change = 0
gameExit = False
gameMove = True
while not gameExit and gameMove == True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = False
if event.type ==pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -5
if event.key == pygame.K_RIGHT:
x_change = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFTor event.key == pygame.K_RIGHT:
x_change = 0
#valid move, add x_change
if((x+x_change)> 0 and (x+x_change)<(display_width - tankSprite_width):
x += x_change
gameWindow.fill(white)
tank(x,y)
#deleted stuff here
pygame.display.update()
clock.tick(60)
game_loop()
pygame.quit()
quit()
使用此方法,您甚至不需要再使用gameMove
变量。
您也可以完全删除x_change
变量,只需将更改直接应用于x
即可。
此外,我认为您可能在if语句gameExit = True
下有if event.type == pygame.QUIT:
,因为在触发事件pygame.QUIT
时退出是有意义的。