Я пытаюсь добавить платформу в свою игру, чтобы, как только вы ее ударили, игрок оставался на платформе, пока она не упала, и в этом случае она упала бы на землю.Прыжок работает, но столкновение не
Я попытался добавить некоторые из типичных типов детекторов столкновений ниже, но все они имеют обратные стороны
class Platform:
def __init__(self, x, y, background):
self.xpos = x
self.ypos = y
self.picture = background
self.picture = pygame.transform.scale(self.picture, (500, 100))
self.rect = self.picture.get_rect()
def draw(self):
screen.blit(self.picture, (self.xpos, self.ypos))
class Player:
def __init__(self, x, y, pic_one, pic_two, pic_three, pic_four):
self.xpos = x
self.ypos = y
self.speed_y = 0
self.speed_x = 0
self.picture = pic_one
self.picture_one = pic_one
self.picture_two = pic_two
self.picture_three = pic_three
self.picture_four = pic_four
self.on_ground = True
self.picture = pygame.transform.scale(self.picture, (100, 100))
self.rect = self.picture.get_rect()
def update(self):
self.xpos += self.speed_x
self.ypos += self.speed_y
GRAVITY = 0.9
self.speed_y += GRAVITY # Accelerate downwards.
self.xpos += self.speed_x
self.ypos += self.speed_y
if self.ypos >= 620:
self.ypos = 620
self.speed_y = 0
self.on_ground = True
if self.on_ground == True:
self.speed_y = 0
def jump(self):
if self.on_ground:
self.on_ground = False
self.speed_y = -20#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(30, 600, player_one_first_pic)
wood_platform = Platform(400, 400, platform_pic)
while True:
[...]
это типичный тип столкновенияЯ бы попробовал и использовал, но оператор if, кажется, никогда не встречается
if player_one.rect.bottom == wood_platform.rect.top:
player_one.on_ground = True
, другой, на котором я пробовал, который обнаруживает, сталкиваются ли прямоугольники, и оператор if равен True, даже если прямоугольники не сталкиваются
if player_one.is_collided_with(wood_platform):
player_one.on_ground = True
этот метод мне неудобен, потому что его недостаточно
if player_one.ypos == 600:
player_one.on_ground = True
Фактические результаты для метода, который я использовал, заключались в том, что игрок вообще не сталкивался с деревянной платформой
(Вот диаграмма, если вам нужно немного больше понимания :)
Проверяет наличие столкновений, но не работает
if player_one.rect.y == wood_platform.rect.y:
print(True)
player_one.on_ground = True
on_platform = True
else:
on_platform = False
меняется после каждого обновления
self.rect.x = self.xpos
self.rect.y = self.ypos