python中的动画速度问题(pygame)

python中的动画速度问题(pygame),python,animation,pygame,Python,Animation,Pygame,我正在制作一个忍者游戏,其中忍者必须通过跳跃(按空格键)躲避障碍物,但跳跃动画太快,忍者无法跳过障碍物。 我希望它跳得稍微慢一点,以便跳出障碍物,并一直跳到394 y值,即使按键后松开,然后下来 请注意,我是一个初学者 import pygame,time,random #import pygame.init() #pygame initialization screen = pygame.display.set_mode((0,0)) pygame.quit() pygame.ini

我正在制作一个忍者游戏,其中忍者必须通过跳跃(按空格键)躲避障碍物,但跳跃动画太快,忍者无法跳过障碍物。 我希望它跳得稍微慢一点,以便跳出障碍物,并一直跳到394 y值,即使按键后松开,然后下来

请注意,我是一个初学者

import pygame,time,random #import    
pygame.init() #pygame initialization

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

clock = pygame.time.Clock()

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]
ninjaState = "Run"

ninjaStars = [pygame.image.load("C:/Garv/python/pygame/Ninja Game/ninja star 2.png"),pygame.image.load("C:/Garv/python/pygame/Ninja Game/ninja star.png")]
tyre = pygame.image.load("C:/Garv/python/pygame/Ninja Game/tyre.png")
rock = pygame.image.load("C:/Garv/python/pygame/Ninja Game/stone.png")
acid = pygame.image.load("C:/Garv/python/pygame/Ninja Game/acid.png")

rockX = 1000
rockY = 625

starX1 = 1050
starY1 = 580

starX2 = 1000
starY2 = 650

tyreX = 1000
tyreY = 590

acidX = 1000
acidY = 718

class obstacles: # obstacle class
    def __init__(self,stars,tyre,rock,canvas,rockX,rockY,starX1,starX2,starY1,starY2,tyreX,tyreY,acid,acidX,acidY):
        self.stars = stars
        self.tyre = tyre
        self.rock = rock
        self.canvas = canvas
        self.rockX = rockX
        self.rockY = rockY
        self.starX1 = starX1
        self.starX2 = starX2
        self.starY1 = starY1
        self.starY2 = starY2
        self.tyreX = tyreX
        self.tyreY = tyreY
        self.acid = acid
        self.acidX = acidX
        self.acidY = acidY
    def choose(self):
        self.rand = random.randint(1, 4)
    def rockImage(self): # drawing rock
        self.canvas.blit(self.rock, (self.rockX,self.rockY))
        if self.rockX == -161:
            self.choose()
            self.rockX = 1000
        elif self.rockX != -161:
            self.rockX -= 1
        
    def starsImage(self): # drawing ninjaStar
        self.canvas.blit(self.stars[0], (self.starX1,self.starY1))
        self.canvas.blit(self.stars[1], (self.starX2,self.starY2))
        if self.starX1 == -50 and self.starX2 == -100:
            self.choose()
            self.starX1 = 1050
            self.starX2 = 1000
        elif self.starX1 != -50 and self.starX2 != -100:
            self.starX1 -= 1
            self.starX2 -= 1
    def tyreImage(self): # drawing tyre
        self.canvas.blit(self.tyre, (self.tyreX,self.tyreY))
        if self.tyreX == -120:
            self.choose()
            self.tyreX = 1000
        elif self.tyreX != -120:
            self.tyreX -= 1
    def acidImage(self):# drawing acid
        self.canvas.blit(self.acid,(self.acidX,self.acidY))
        if self.acidX == -144:
            self.choose()
            self.acidX = 1000
        elif self.acidX != -144:
            self.acidX -= 1

tim = 10
class Ninja: # ninja class
    def __init__(self,canvas,start,run,image,x,y,time,ninjaState): #Initializing of variables
        self.canvas = canvas
        self.start = start
        self.run = run
        self.image = image
        self.x = x
        self.y = y
        self.time = time
        self.ninjaState = ninjaState
    def ninja(self): #ninja movement method
        self.image = ninjaRun[0]
        self.sec = int((time.time()-self.start)*self.time)
        if self.sec % 2 != 0:
            self.image = ninjaRun[0]
            if ninjaState == "Jump":
                self.image = pygame.image.load("C:/Garv/python/pygame/Ninja Game/ninja jumping.jpg")
            elif ninjaState == "Run":
                self.image = ninjaRun[0]
        elif self.sec % 2 == 0:
            self.image = ninjaRun[1]
            if ninjaState == "Jump":    
                self.image = pygame.image.load("C:/Garv/python/pygame/Ninja Game/ninja jumping.jpg")
            elif ninjaState == "Run":
                self.image = ninjaRun[1]
            
        self.canvas.blit(self.image, (self.x,self.y)) #ninja draw
        
player = Ninja(canvas,start,ninjaRun,ninjaRun[0],x,y,tim,ninjaState) #calling Ninja class
obstacle = obstacles(ninjaStars,tyre,rock,canvas,rockX,rockY,starX1,starX2,starY1,starY2,tyreX,tyreY,acid,acidX,acidY)#calling obstacle class

obstacle.choose()

def decide(): # calling draw functions
    if obstacle.rand == 1:
        obstacle.rockImage()
    elif obstacle.rand == 2:
        obstacle.starsImage()
    elif obstacle.rand == 3:
        obstacle.tyreImage()
    else:
        obstacle.acidImage()
while True: #main loop
    if player.y == y:
        ninjaState = "Run"
    elif player.y < y:
        ninjaState = "Jump"
    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:
                ninjaDirect = "up"
                player.y -= 100
                if player.y < 100:
                    player.y += 100
                    ninjaDirect = "down"
        if event.type == pygame.KEYUP: #keyup
            if event.key == pygame.K_SPACE:
                player.y += 100
    canvas.blit(sky, (0,0))#sky drawing
    canvas.blit(land, (0,718))#land drawing
    decide() # obstacle drawing
    player.ninja() #ninja drawing
    pygame.display.update() #display update
    clock.tick(60)
import pygame,time,random#import
pygame.init()#pygame初始化
screen=pygame.display.set_模式((0,0))
pygame.quit()
pygame.init()
clock=pygame.time.clock()
canvas=pygame.display.set_模式((1000780))35;创建屏幕
caption=pygame.display.set_caption(“忍者奔跑”)#创建字幕
iconImage=pygame.image.load(“C:/Garv/python/pygame/Ninja Game/Ninja_logo.png”)
icon=pygame.display.set_图标(iconImage)#绘制图标图像
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”)#天空图像
x=50
y=594
开始=时间。时间()
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”)#忍者图像
ninjaImage=ninjaRun[0]
忍者状态=“跑步”
忍者之星=[pygame.image.load(“C:/Garv/python/pygame/Ninja-Game/Ninja-star 2.png”),pygame.image.load(“C:/Garv/python/pygame/Ninja-Game/Ninja-star.png”)]
轮胎=pygame.image.load(“C:/Garv/python/pygame/Ninja-Game/tyre.png”)
rock=pygame.image.load(“C:/Garv/python/pygame/Ninja-Game/stone.png”)
acid=pygame.image.load(“C:/Garv/python/pygame/Ninja-Game/acid.png”)
岩石x=1000
洛基=625
starX1=1050
starY1=580
starX2=1000
starY2=650
tyreX=1000
泰利=590
acidX=1000
酸性=718
类别障碍:#障碍类别
定义初始(赛尔夫、星星、轮胎、岩石、帆布、岩石、岩石、岩石、岩石、starX1、starX2、starY1、starY2、tyreX、tyreY、acid、acidX、acidY):
self.stars=星星
轮胎
self.rock=rock
self.canvas=画布
self.rockX=rockX
self.rockY=rockY
self.starX1=starX1
self.starX2=starX2
self.starY1=starY1
self.starY2=starY2
self.tyreX=tyreX
self.tyreY=tyreY
self.acid=acid
self.acidX=acidX
self.acidY=acidY
def选择(自我):
self.rand=random.randint(1,4)
def rockImage(自我):#绘制岩石
self.canvas.blit(self.rock,(self.rockX,self.rockY))
如果self.rockX==-161:
self.choose()
self.rockX=1000
elif self.rockX!=-161:
self.rockX-=1
def starsImage(self):#画忍者星
self.canvas.blit(self.stars[0],(self.starX1,self.starY1))
self.canvas.blit(self.stars[1],(self.starX2,self.starY2))
如果self.starX1==-50和self.starX2==-100:
self.choose()
self.starX1=1050
self.starX2=1000
elif self.starX1!=-50和self.starX2!=-100:
self.starX1-=1
self.starX2-=1
def轮胎图像(自身):#牵引轮胎
self.canvas.blit(self.tyre,(self.tyreX,self.tyreY))
如果self.tyreX==-120:
self.choose()
self.tyreX=1000
elif self.tyreX!=-120:
self.tyreX-=1
def酸化图像(自身):#吸酸
self.canvas.blit(self.acid,(self.acidX,self.acidY))
如果self.acidX==-144:
self.choose()
self.x=1000
elif self.acidX!=-144:
self.x-=1
tim=10
忍者班:#忍者班
定义初始化(self、canvas、start、run、image、x、y、time、忍者状态):#初始化变量
self.canvas=画布
self.start=开始
self.run=run
self.image=image
self.x=x
self.y=y
self.time=时间
self.ninjaState=忍者状态
定义忍者(自我):#忍者移动方法
self.image=ninjaRun[0]
self.sec=int((time.time()-self.start)*self.time)
如果self.sec%2!=0:
self.image=ninjaRun[0]
如果忍者状态==“跳跃”:
self.image=pygame.image.load(“C:/Garv/python/pygame/Ninja-Game/Ninja-jumping.jpg”)
elif ninjaState==“跑步”:
self.image=ninjaRun[0]
elif self.sec%2==0:
self.image=ninjaRun[1]
如果忍者状态==“跳跃”:
self.image=pygame.image.load(“C:/Garv/python/pygame/Ninja-Game/Ninja-jumping.jpg”)
elif ninjaState==“跑步”:
self.image=ninjaRun[1]
self.canvas.blit(self.image,(self.x,self.y))#忍者绘画
玩家=忍者(画布,开始,忍者,忍者[0],x,y,tim,忍者状态)#调用忍者类
障碍物=障碍物(忍者、轮胎、岩石、帆布、岩石X、岩石、星星X1、星星X2、星星1、星星2、轮胎X、轮胎Y、酸、酸、酸)#呼叫障碍物等级
障碍。选择()
def decise():#调用绘图函数
如果障碍物.rand==1:
障碍物。rockImage()
elif.rand==2:
障碍。starsImage()
elif.rand==3:
障碍物。tyreImage()
其他:
障碍物.酸化图像()
如果为True:#主循环
如果player.y==y:
忍者状态=“跑步”
elif player.yspeedJump = 2 # play with this value, try to decrease and increase
ninjaDirect = None
while True:  # main loop
  if ninjaDirect == "down":
    if player + 100 >= y:
      # we in middle of jump
      player.y += speedJump
    else: # we finish the jump
      ninjaDirect = None
      player.y = y
  ...
  for event in pygame.event.get():
  ...
    if event.type == pygame.KEYDOWN: #keydown
      if event.key == pygame.K_SPACE:
        if player.y > 100:
          ninjaDirect = "up"
          player.y -= speedJump
      else: ninjaDirect = "down"
    if event.type == pygame.KEYUP: #keyup
      if event.key == pygame.K_SPACE:
        ninjaDirect = "down"
  ...