真的很难跳跃

时间:2016-01-17 00:12:24

标签: python pygame

我已经尝试了所有尝试让我的精灵跳跃,但我决定从头开始尝试找到一种方法再次执行此操作。你们有什么方法可以提供帮助。我的碰撞检测取决于vspeed所以当我碰到我的平台时,我不认为我可以将vspeed设置为0。多年来我一直坚持这个。现在我的角色只是简单地上下移动。我需要一个简单的跳跃。任何帮助将不胜感激!

class Player(pygame.sprite.Sprite):
def __init__(self,x,y,width = 65, height = 35):
    pygame.sprite.Sprite.__init__(self)
    self.x = x
    self.y = y
    self.hspeed,self.vspeed = 2,4

    self.images=[]
    r0 = pygame.image.load("Images\Player\i1.png")
    r1 = pygame.image.load("Images\Player\i2.png")
    r2 = pygame.image.load("Images\Player\i3.png")
    r3 = pygame.image.load("Images\Player\i4.png")
    self.hurt = pygame.image.load("Images\Player\Hurt.png")
    self.images.append(r0)
    self.images.append(r1)
    self.images.append(r2)
    self.images.append(r3)

    self.rotatedimages = []
    rr0 = pygame.transform.flip(r0 ,True, False)
    rr1 = pygame.transform.flip(r1 ,True, False)
    rr2 = pygame.transform.flip(r2 ,True, False)
    rr3 = pygame.transform.flip(r3 ,True, False)
    self.rotatedimages.append(rr0)
    self.rotatedimages.append(rr1)
    self.rotatedimages.append(rr2)
    self.rotatedimages.append(rr3)

    self.gravity = 0.5
    self.index = 0
    self.image = self.images[self.index]
    self.rect = pygame.Rect(self.x,self.y,width,height)

    self.TimeNum=0
    self.TimeTarget=10
    self.Timer = 0
    self.collision = False

def Level1PlatColl(self, BlockListGrass, TrapList, enemygroup, PowerUps):
    PlatformCollision = pygame.sprite.spritecollide(self, BlockListGrass, False )
    for each_object in PlatformCollision:
        self.collision = True
        if self.collision == True:
            self.OnGround = True
            if self.vspeed > 0:
                self.rect.bottom = each_object.rect.top

            if self.vspeed <0:
                self.rect.top = each_object.rect.bottom

def move(self):

    key = pygame.key.get_pressed()

    if key[pygame.K_LEFT]:
       self.rect.move_ip(-self.hspeed,0)

    if key[pygame.K_RIGHT]:
       self.rect.move_ip(self.hspeed,0)

    if key[pygame.K_UP]:
       self.rect.y -= self.vspeed

    if key[pygame.K_DOWN]:
        self.rect.y += self.vspeed

1 个答案:

答案 0 :(得分:1)

  1. 当您按K_UP时,设置vchange = vspeed(和self.OnGround = False

  2. 在每个框架/循环中,您使用y -= vchange跳转

  3. 在每个框架/循环中,您使用vchange -= gravity来减慢跳跃速度。

  4. 首先它会让玩家向上移动,但是重力会降低玩家的速度并让玩家向下移动。

    (当我说&#34;按&#34;我的意思是从pygame.KEYUPpygame.KEYDOWN的关键更改状态的单一时刻 - 而不是当你按下它时 - 所以你必须使用for event in pygame.event.get()代替pygame.key.get_pressed()或使用onGround检查K_UP