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

如何知道在pygame中按下空格键是否超过2秒

如何解决如何知道在pygame中按下空格键是否超过2秒

所以,我正在使用 pygame 制作一个简单的游戏,其中忍者必须躲避他面前的障碍物,问题是我无法知道空格键(用于跳跃)是否被按下更多超过 2 秒。

我在很多网站上搜索过这个答案,但没有找到。

请注意,我是初学者。

这是我的代码

import pygame,time #import


pygame.init() #pygame initialization

screen = pygame.display.set_mode((0,0))
pygame.quit()

canvas = pygame.display.set_mode((1000,780)) #creating screen
caption = pygame.display.set_caption("Ninja Run") #creating caption

iconImage = pygame.image.load("C:/Garv/python/pygame/Ninja Game/Ninja_logo.png")
icon = pygame.display.set_icon(iconImage) #drawing icon image

land = pygame.image.load("C:/Garv/python/pygame/Ninja Game/land.jfif") #land image
sky = pygame.image.load("C:/Garv/python/pygame/Ninja Game/sky.jfif") # sky image

x = 50
y = 594

start = time.time()
ninjaRun = [pygame.image.load("C:/Garv/python/pygame/Ninja Game/ninja running 1.jpg"),pygame.image.load("C:/Garv/python/pygame/Ninja Game/ninja running 2.jpg")] #ninja images
ninjaimage = ninjaRun[0]

# ninjaStars = pygame.image.load("C:/Garv/python/pygame/Ninja Game/ninja stars.png")

class Ninja:
    def __init__(self,canvas,start,run,image,x,y): #Initializing of variables
        self.canvas = canvas
        self.start = start
        self.run = run
        self.image = image
        self.x = x
        self.y = y
    def ninja(self): #ninja movement method
        self.image = ninjaRun[0]
        self.time = 15
        self.sec = int((time.time()-self.start)*self.time)
        if self.sec % 2 != 0:
            self.image = ninjaRun[0]
        elif self.sec % 2 == 0:
            self.image = ninjaRun[1]
            
        self.canvas.blit(self.image,(self.x,self.y)) #ninja draw
        
        
player = Ninja(canvas,ninjaRun,ninjaRun[0],y) #calling Ninja class

cnt = 0

startTime = time.time()
        
while True: #main loop
    for event in pygame.event.get(): #event handler
        if event.type == pygame.QUIT: #quit handler
            pygame.quit()
            import sys
            sys.exit()
        
        if event.type == pygame.KEYDOWN: #keydown
            if event.key == pygame.K_SPACE: 
                player.y -= 200
                if player.y < 394:
                    player.y += 200
        if event.type == pygame.KEYUP: #keyup
            if event.key == pygame.K_SPACE:
                player.y += 200
                
                
    # canvas.blit(ninjaStars,(500,500))
    pygame.draw.rect(canvas,(250,250,250),500,20,20))
    canvas.blit(land,(0,718)) #land drawing
    canvas.blit(sky,0)) #sky drawing
    player.ninja() #ninja drawing
    
    pygame.display.update() #display update
    
    

解决方法

使用 pygame.time.get_ticks() 获取自调用 pygame.init() 以来的毫秒数:

while True: #main loop
    for event in pygame.event.get(): #event handler
        if event.type == pygame.QUIT: #quit handler
            # [...]
        
        if event.type == pygame.KEYDOWN: #keydown
            if event.key == pygame.K_SPACE: 
                space_start = pygame.time.get_ticks() 
                # [...]
                
        if event.type == pygame.KEYUP: #keyup
            if event.key == pygame.K_SPACE:
                space_end = pygame.time.get_ticks() 
                if space_end - space_start >= 2000:
                    # [...]

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