Window 边界在 pygame
Window boundaries in pygame
基本上我正在尝试为我正在制作的小游戏添加一些边界,我有一个只能从左向右移动的精灵,我试图阻止它离开游戏 window,如果精灵到达边缘,他们就不能再往前走,然后可以朝相反的方向走。
我当前的代码:
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。抱歉格式不正确
只需拆分您的 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 语句 if event.type == pygame.QUIT:
下指的是 gameExit = True
,因为触发事件 pygame.QUIT
时退出是有意义的。
基本上我正在尝试为我正在制作的小游戏添加一些边界,我有一个只能从左向右移动的精灵,我试图阻止它离开游戏 window,如果精灵到达边缘,他们就不能再往前走,然后可以朝相反的方向走。 我当前的代码:
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。抱歉格式不正确
只需拆分您的 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 语句 if event.type == pygame.QUIT:
下指的是 gameExit = True
,因为触发事件 pygame.QUIT
时退出是有意义的。