Как мне сделать спавн коллизионых платформ
как мне сделать спавн платформ на которые я могу прыгать самостоятельно и с которых я могу так же перепрыгивать на другие платформы и где я могу свободно двигаться, а если я выхожу за пределы текстурки платформы то я падаю вниз вот код весь:
import pygame as pg
import random
#MAIN INFORMATION
W,H = 800,500
display = pg.display.set_mode((W,H))
clock = pg.time.Clock()
FPS = 60
class Player(pg.sprite.Sprite):
def __init__(self, x, y, file):
pg.sprite.Sprite.__init__(self)
self.image = pg.image.load(file)
self.image_left = pg.transform.flip(self.image, True, False)
self.image_right = pg.transform.flip(self.image_left, True, False)
self.rect = self.image.get_rect(center = (x, y))
self.dead = False
self.dx = 0
self.dy = 0
self.notFall = False
self.platform_rect = None
def update(self, *args):
self.rect.x += self.dx
if not self.notFall:
self.dy += 1
self.rect.y += self.dy
self.notFall = False
if self.rect.y > args[0]:
self.rect.y = args[0]
self.dy = 0
self.notFall = True
self.dx = 0
if self.rect.colliderect(args[2].platform_rect):
self.rect.bottom = args[2].platform_rect.top
self.dy = 0
self.notFall = True
class Platform(pg.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pg.image.load('blue.png')
#self.image.fill(GREEN)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.platform_rect = self.rect
class Coin(pg.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pg.image.load('coin.png')
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
all_sprites = pg.sprite.Group()
platforms = pg.sprite.Group()
coins = pg.sprite.Group()
human = Player(100,400, 'human.png')
all_sprites.add(human)
pltf = Player(400, 400, 'blue.png')
pltf.platform_rect = pltf.image.get_rect(center=(pltf.rect.x, pltf.rect.y))
for i in range(10):
p = Platform(random.randint(0, W - 100), random.randint(0, H - 40))
platforms.add(p)
for i in range(10):
p = Platform(random.randint(0, W - 100), random.randint(0, W - 40))
all_sprites.add(p)
platforms.add(p)
def main():
while True:
for e in pg.event.get():
if e.type == pg.QUIT:
return
keys = pg.key.get_pressed()
if keys[pg.K_a]:
human.dx = -5
human.image = human.image_left
if keys[pg.K_d]:
human.dx = 5
human.image = human.image_right
if keys[pg.K_SPACE]:
if human.notFall:
human.dy = -20
human.notFall = False
for platform in platforms:
x = pltf.rect.x + random.randint(0, platform.rect.width - 30)
y = pltf.rect.y - 30
coin = Coin(x, y)
#coins.add(coin)
#all_sprites.add(coin)
all_sprites.update(H - human.rect.height, platforms, Platform)
display.fill('white')
display.blit(human.image, human.rect)
display.blit(pltf.image, pltf.rect)
all_sprites.draw(display)
pg.display.update()
clock.tick(FPS)
if __name__ == '__main__':
main()