python(pygame)中动画速度的问题 [英] Problem in speed of animation in python(pygame)

查看:143
本文介绍了python(pygame)中动画速度的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am making a ninja game in which a ninja has to dodge obstacle by jumping(pressing spacebar), but the jump animation is too fast and the ninja is not able to jump beyond the obstacles. I want that it jumps a little slowly so as to make it jump beyond the obstacles, and goes till the 394 y value even if the key is released after pressing and then come down.

请注意,我是初学者.

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)

任何答案将不胜感激.

推荐答案

可能的解决方案,添加变量:

possible solution, add a varibles:

speedJump = 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"
  ...




  

这篇关于python(pygame)中动画速度的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆