这是我正在制作的第一款Pygame游戏。
我打算用基本的方块/块制作一个2人格斗游戏。
我现在正试图实现跳到第一个角色,在我看来,所有逻辑看起来都是正确的,此刻我没有错误。但是,当我尝试按w
跳跃时,没有任何反应!
所有帮助表示赞赏。 (P.S。如果你想知道为什么我的剧本中没有课程,我似乎无法理解课程,他们对我很困惑:P)谢谢,这是我的代码:
import pygame
pygame.init()
#Sets up 8 bit colours
white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
lightblue = (180,235,255)
grassgreen =(20,200,50)
#Sets up pygame window
gameDisplay = pygame.display.set_mode((1000,600))
pygame.display.set_caption('Block Fighter')
gameExit = False
#Variables
x = 50
y = 480
x_change = 0
y_change = 0
clock = pygame.time.Clock()
#Main Game Loop
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
x_change = -5
if event.key == pygame.K_d:
x_change = 5
if event.key == pygame.K_w:
y_change = -5
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_d:
x_change = 0
if y <= 480:
onGround = False
else:
onGround = True
if onGround == False:
y_change = 5
if onGround == True:
y_change = 0
x += x_change
y += y_change
gameDisplay.fill(lightblue)
pygame.draw.rect(gameDisplay, grassgreen, [1000,600,-1000,-100])
pygame.draw.rect(gameDisplay, black, [x,y,20,20])
pygame.display.update()
clock.tick(40)
pygame.quit()
quit()
答案 0 :(得分:3)
按w跳转时,游戏会按预期将y_change
的值更改为-5
。处理完事件队列后,它将继续执行此块:
if y <= 480:
onGround = False
else:
onGround = True
if onGround == False:
y_change = 5
if onGround == True:
y_change = 0
此时你的物理还没有被模拟过,所以你的角色仍然在地面上。换句话说,onGround
仍为True
。因此,if onGround == True: y_change = 0
代码将被执行,y_change
将再次设置为0。
发生这种情况后,你的物理模拟就会发生,y_change
现在为0.这就是你的角色没有跳跃的原因。你需要重新设计你的代码,以便游戏在你检查他是否在地面时意识到你的角色开始跳跃。祝你的游戏好运!