加快重力对蟒蛇的影响

时间:2017-07-21 00:08:40

标签: python-2.7

我想出了如何在我正在制作的平台游戏中加入重力。

问题是,精灵跳起来太慢了。水平移动不是问题,但精灵在跳跃时会明显减慢。

我该如何解决这个问题?谢谢。

这是我的引力代码的一部分。 :

def update(self):
    """ Move the player. """
    # Gravity
    self.calc_grav()

    # Move left/right
    self.rect.x += self.change_x

    # See if we hit anything
    block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
    for block in block_hit_list:
        # If we are moving right,
        # set our right side to the left side of the item we hit
        if self.change_x > 0:
            self.rect.right = block.rect.left
        elif self.change_x < 0:
            # Otherwise if we are moving left, do the opposite.
            self.rect.left = block.rect.right

    # Move up/down
    self.rect.y += self.change_y

    # Check and see if we hit anything
    block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
    for block in block_hit_list:

        # Reset our position based on the top/bottom of the object.
        if self.change_y > 0:
            self.rect.bottom = block.rect.top
        elif self.change_y < 0:
            self.rect.top = block.rect.bottom

        # Stop our vertical movement
        self.change_y = 0

def calc_grav(self):
    """ Calculate effect of gravity. """
    if self.change_y == 0:
        self.change_y = 1
    else:
        self.change_y += 0.5

    # See if we are on the ground.
    if self.rect.y >= SCREEN_HEIGHT - self.rect.height and self.change_y >= 0:
        self.change_y = 0
        self.rect.y = SCREEN_HEIGHT - self.rect.height

def jump(self):
    """ Called when user hits 'jump' button. """

    # move down a bit and see if there is a platform below us.
    # Move down 2 pixels because it doesn't work well if we only move down
    # 1 when working with a platform moving down.
    self.rect.y += 2
    platform_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
    self.rect.y -= 2

    # If it is ok to jump, set our speed upwards
    if len(platform_hit_list) > 0 or self.rect.bottom >= SCREEN_HEIGHT:
        self.change_y = -12

# Player-controlled movement:
def go_left(self):
    """ Called when the user hits the left arrow. """
    self.change_x = -8

def go_right(self):
    """ Called when the user hits the right arrow. """
    self.change_x = 8

def stop(self):
    """ Called when the user lets off the keyboard. """
    self.change_x = 0

0 个答案:

没有答案