微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

铬恐龙游戏在pygame中每次点击跳跃两次

如何解决铬恐龙游戏在pygame中每次点击跳跃两次

你好,我目前正在尝试在 pygame 中制作一个跳跃游戏,就像 chrome dino 游戏一样。我编写了一些简单的代码来绘制一个正方形并使其跳跃。我将在下面列出我的代码。我的问题是跳跃部分。每当我按下跳跃按钮时,方块就会跳跃多次(通常是 2 次)。堆栈溢出的好人请帮助有需要的人。 这是我的代码

import pygame

pygame.init()

screen_width = 500
screen_height = 400
isJump = False
y = 350
x = 50
BLUE=(0,255)
run = True

screen = pygame.display.set_mode((screen_width,screen_height))
screen.fill((0,0))
pygame.display.set_caption("syoma n9ot intelent")
pygame.draw.rect(screen,BLUE,(x,y,50,50))

while run:
  pygame.display.flip()
  for event in pygame.event.get():
      keys = pygame.key.get_pressed()
      if keys[pygame.K_w]:
        for a in range (1,250): 
          y -= .5
          screen.fill((0,0))
          pygame.draw.rect(screen,50))
          pygame.display.flip()

          
        for a in range (1,250):
          y += .5
          screen.fill((0,50))
          pygame.display.flip()


          
        
        
 
      if event.type == pygame.QUIT:
       run = False
pygame.quit() 

解决方法

使用 KEYDOWN 事件代替 pygame.key.get_pressed()

pygame.key.get_pressed() 返回一个包含每个键状态的序列。如果某个键被按下,则该键的状态为 True,否则为 False。使用 pygame.key.get_pressed() 评估按钮的当前状态并获得连续移动。

键盘事件(参见 pygame.event 模块)仅在键的状态改变时发生一次。 KEYDOWN 事件在每次按下键时发生一次。 KEYUP 每次释放键时出现一次。将键盘事件用于单个操作或逐步移动。

使用 pygame.time.Clock 控制每秒帧数,从而控制游戏速度。

tick() 对象的方法 pygame.time.Clock 以这种方式延迟游戏,即循环的每次迭代消耗相同的时间段。见pygame.time.Clock.tick()

这个方法应该每帧调用一次。

这意味着循环:

clock = pygame.time.Clock()
run = True
while run:
   clock.tick(100)

每秒运行 100 次。

不要在应用程序或事件循环中使用额外的循环来控制游戏。使用应用程序循环。使用变量 isJumpjumpCount 来控制跳转。当按下 w 时,设置变量 isJump = TruejumpCount = 20。在应用程序循环中减少 jumpCount 并更改播放器的 y 位置。设置 isJump = False 如果 jumpCount == -20


完整示例:

import pygame

pygame.init()

screen_width = 500
screen_height = 400
isJump = False
jumpCount = 0
y = 350
x = 50
BLUE=(0,255)
run = True

screen = pygame.display.set_mode((screen_width,screen_height))
clock = pygame.time.Clock()
pygame.display.set_caption("syoma n9ot intelent")
pygame.draw.rect(screen,BLUE,(x,y,50,50))

while run:
    clock.tick(100)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                isJump = True
                jumpCount = 20

    if isJump:
        if jumpCount > 0:
            y -= 5
        elif jumpCount <= 0:
            y += 5
        jumpCount -= 1
        if jumpCount == -20:
            isJump = False
          
    screen.fill((0,0))
    pygame.draw.rect(screen,50))
    pygame.display.flip()    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。