gpt4 book ai didi

python - 使用 pygame.key.get_pressed() 时创建边框

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:15 24 4
gpt4 key购买 nike

我正在编写一款自上而下的射击游戏,最近试图找出一种在按住某个键的同时连续移动我的角色的方法。我在互联网上搜索一种方法,发现了 pygame.key.get_pressed() ,这非常有效,直到我尝试创建边框,这样你就无法逃脱屏幕的两侧。我基本上已经解决了这个问题,当你按住移动键时,pygame无法检查玩家的x和y坐标,因此即使你添加类似 if 的内容,它也允许玩家移动出界x >= 0:

我问是否有一种方法可以在使用pygame.key.get_pressed()按住移动按钮的同时为屏幕两侧创建边框,或者是否有好的方法移动的替代方案。

部分代码:

    if eventHandler == "LEVEL1":
# SEE IF PLAYER QUIT AND PROCEED TO QUIT
for event in pygame.event.get():
if event.type == pygame.QUIT:
loop = False

if event.type == pygame.KEYDOWN:

keys = pygame.key.get_pressed()

if keys[pygame.K_UP]:
movingUP = True
if keys[pygame.K_DOWN]:
movingDOWN = True
if keys[pygame.K_LEFT]:
movingLEFT = True
if keys[pygame.K_RIGHT]:
movingRIGHT = True

if event.type == pygame.KEYUP:
movingUP = False
movingDOWN = False
movingLEFT = False
movingRIGHT = False
x_change = 0
y_change = 0

if movingUP == True:
y_change -= 5
if movingDOWN == True:
y_change += 5
if movingLEFT == True:
x_change -= 5
if movingRIGHT == True:
x_change += 5

# UPDATES EVERY TIME GAME LOOPS
pygame.display.update()
clock.tick(60)
x += x_change
y += y_change
if eventHandler == "LEVEL1":
w.blit(level1map, (0, 0))
w.blit(player, (x, y))
pygame.display.update()

我已经尝试添加(以 16 为边界)

if x >= 16:
x_change = 0
movingLEFT = 0

所有方向依此类推。我基本上在代码中有意义的任何地方都尝试过这个。我也尝试过放置

if keys[pygame.K_LEFT] and x >= 16:
movingLEFT = True

“and variable >= border”在任何可能形成边框的地方,但仍然没有结果。

有什么方法可以创建有效的边框或移动的替代方法吗?

最佳答案

[...] while your holding down the movement keys, pygame can't check the x and y coordinates of your player, [...]

没有。

按住移动键时,不会发生任何事件。按下按键时有一个 pygame.KEYDOWN 事件,释放按键时有一个 pygame.KEYUP 事件。
但是,当按下某个键时,不会发生连续的事件。

非常适合通过 ( pygame.key.get_pressed() ) 在事件循环中获取按下的键并更改控制变量 movingUP, movingDOWN, 向左移动 向右移动。当 pygame.event.get() 处理事件时,pygame.key.get_pressed() 返回的值会更新。 .

但是每次位置(xy)更改时,都必须在每一帧中进行边界检查。它必须在主游戏循环中完成,而不是在事件循环中:

maxX = # screenWidth - playerWidth  
maxY = # screenHeight - playerHeight

while loop:
if eventHandler == "LEVEL1":
# SEE IF PLAYER QUIT AND PROCEED TO QUIT
for event in pygame.event.get():
if event.type == pygame.QUIT:
loop = False

if event.type == pygame.KEYDOWN:
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
movingUP = True
# [...]

if movingUP == True:
y_change -= 5
# [...]

x += x_change
y += y_change

if x < 0:
x = 0
x_change = 0
elif x > maxX
x = maxX
x_change = 0
if y < 0:
y = 0
y_change = 0
elif y > maxY
y = maxY
y_change = 0

关于python - 使用 pygame.key.get_pressed() 时创建边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com