我正在编写一个自上而下的射击游戏,最近正试图找出一种方法,可以在按住键的同时连续移动角色。我正在互联网上寻找方法,发现pygame.key.get_pressed()
的效果很好,直到尝试创建边框,这样您才无法逃离屏幕的两侧。我基本上已经解决了以下问题:当您按住移动键时,pygame无法检查玩家的x和y坐标,因此,即使您添加了{{1}之类的东西,它也允许玩家移出界线}。
我问是否有一种方法可以为屏幕的两侧创建边框,同时按住if x >= 0:
的移动按钮,或者是否有很好的替代方法。
一些代码:
pygame.key.get_pressed()
我已经尝试添加(以16为边框)
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()
,以此类推。我基本上在代码中有意义的任何地方尝试了此操作。我也尝试过放
if x >= 16:
x_change = 0
movingLEFT = 0
“和变量> =边界”在可能会产生边界的任何地方,但仍然没有结果。
有什么方法可以创建可以使用的边框或移动的替代方法?
答案 0 :(得分:0)
[...]按住移动键时,pygame无法检查玩家的[x]和[y]坐标,[...]
否。
按住移动键时,不会发生任何事件。按下键时有一个pygame.KEYDOWN
事件,而释放键时有一个pygame.KEYUP
事件。
但是,按下一个键时不会连续发生事件。
非常适合通过(pygame.key.get_pressed()
)在事件循环中获得按下的键并更改控制变量movingUP
,movingDOWN
,movingLEFT
的状态movingRIGHT
。由pygame.event.get()
处理事件时,由pygame.key.get_pressed()
返回的值将更新。
但是每次更改位置(x
,y
)时,都必须在每一帧中进行 bounds 检查。它必须在主游戏循环中完成,而不是在事件循环中完成:
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