@Yatagarashy

Не понимаю в чем ошибка?

Хотел сделать в меню своей игры панораму,
Как оно должно работать?
создается обьект Background с координатами центра экрана, и в методе update если координата x <= координаты центра экрана то создается обьект Background который должен делать так же, но почему то обьект не создается и все :(

main.py
import pygame, math
from functions import *
pygame.init()

def main_setting():
    global W, H, sc, FPS, clock, run, menu, backgrounds
    W = 1200
    H = 600
    sc = pygame.display.set_mode((W,H))

    FPS = 60
    clock = pygame.time.Clock()

    run = True
    menu = True

    load = [pygame.image.load("sprites/background/background_1.png").convert_alpha(),
            pygame.image.load("sprites/background/background_2.png").convert_alpha(),
            pygame.image.load("sprites/background/background_3.png").convert_alpha(), ]
    images = []

    for image in load:
        image = pygame.transform.scale(image, (1200, 600))
        images.append(image)

    image = random.choice(images)

    backgrounds = pygame.sprite.Group()
    backgrounds.add(Background(W//2, backgrounds, image))

    def colors():
        global WHITE, GREY, BLACK
        WHITE = (255, 255, 255)
        GREY = (128, 128, 128)
        BLACK = (0, 0, 0)
    colors()
main_setting()

def scene_menu():


    sc.fill(GREY)
    backgrounds.draw(sc)
    backgrounds.update()


while run:
    if menu:
        scene_menu()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False


    pygame.display.update()
    clock.tick(FPS)
pygame.quit()


functions.py

import pygame, random



class Position:
    x = 0
    y = 0

class Background(pygame.sprite.Sprite):
    def __init__(self, x, group, images):
        pygame.sprite.Sprite.__init__(self)
        self.generate = True
        self.group = group
        self.image = images
        self.rect = self.image.get_rect(center=(x, 300))
        self.add(group)

    def update(self, *args):
        self.rect.x -= 10
        if self.rect.x <= 600 and self.generate:
            self.generate = False
            self.group.add(Background(self.rect.x + 600, self.group, self.image))
            self.kill()


Думаю ошибка в группах, я плохо ими умею пользоваться в классах, точнее Никогда не пользовался
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
TalismanChet
@TalismanChet
Лицо зла
Зачем для этого вообще нужны группы? всегда без них обходился. я вот что скажу: рисуй фон дважды:

class Background(dict):
    def __init__(self, image, x=0):
        self['i'], self['x'] = image, x
        pass
    def draw(self, surface):
        surface.blit(self['i'], (self['x'], 0))
        surface.blit(self['i'], (self['x']-self['i'].get_width(), 0))
        self['x'] += 1
        if self['x'] >= self['i'].get_width(): x = 0
        pass
    pass
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы