Я пытаюсь добавить в свою игру столкновение, чтобы после столкновения игрока с лестницей скорость вращения оси y (которая контролируется силой тяжести) была больше 0 (что означает, что используется сила тяжести). Но проблема, с которой я сталкиваюсь, заключается в том, что, как только я пытаюсь использовать лестницу, столкновение никогда не происходит, и если это иногда случается, гравитация мешает и тянет вниз. Другая проблема заключается в том, что я не могу понять, где бы я добавил столкновение, чтобы проверить, не больше ли игрок сталкивается с лестницей, что означает, что вы находитесь на одной из платформ
Я попытался проверить наличие столкновений, заставив консоль распечатать значение True, если это происходит, но, похоже, это работало только тогда, когда я находился на левой стороне лестницы.
class Ladder(pygame.sprite.Sprite):
def __init__(self, x, y, pic):
self.xpos = x
self.ypos = y
super().__init__()
self.picture = pic
self.picture = pygame.transform.scale(self.picture, (50, 440))
self.rect = self.picture.get_rect()
class Player:
def __init__(self, x, y, pic_one):
self.xpos = x
self.ypos = y
self.speed_y = 0
self.speed_x = 0
self.GRAVITY = 0.9
self.picture = pic_one
self.permission_to_jump = True
self.on_ground = True
self.picture = pygame.transform.scale(self.picture, (100, 100))
self.rect = self.picture.get_rect()
self.rect.x = self.xpos
self.rect.y = self.ypos
def update(self):
if self.on_ground == False:
if self.picture == self.picture_one:
self.GRAVITY = 0.9
self.xpos += self.speed_x
self.ypos += self.speed_y
self.speed_y += self.GRAVITY # Accelerate downwards.
self.rect.x = self.xpos
self.rect.y = self.ypos
if self.ypos >= 620:
self.ypos = 620
self.speed_y = 0
self.on_ground = True
if self.on_ground == True:
self.speed_y = 0
self.xpos += self.speed_x
self.ypos += self.speed_y
def jump(self):
if self.permission_to_jump == True:
if self.on_ground:
#pygame.mixer.Channel(1).play(pygame.mixer.Sound("C:/sounds/Jump Sound Effect.wav"))
self.on_ground = False
self.speed_y = -25#Makes you move upwards
def draw(self):
screen.blit(self.picture, (self.xpos, self.ypos))
def is_collided_with(self, sprite):
return self.rect.colliderect(sprite.rect)
player_one = Player(400, 200, player_one_first_pic)
ladder = Ladder(120, 130, ladder_picture)
while True:
[...]
if joystick.get_button(0) and player_one.is_collided_with(ladder) and player_one.speed_y >= 0:
player_one.on_ground = False
player_one.speed_y = -4
player_one.update()
player_one.draw()
В результате сила тяжести игрока останавливает подъем по лестнице и что игрок может лишь слегка подняться по лестнице, когда она касается левой части лестницы, а игрок не может даже подняться по лестнице
Вот диаграмма, если вы не до конца понимаете мой код (извините, если он немного запутался, мне было трудно вставить диаграмму)