Как я могу сделать движущиеся объекты стартовыми локациями на определенном расстоянии друг от друга? Использование python pygame - PullRequest
2 голосов
/ 23 февраля 2020

Я хочу, чтобы 3 объекта, которые я создал, двигались по экрану справа налево. Каждое из их начальных местоположений разнесено на 90 пикселей друг от друга.

Вот мой класс, который я создал, и для l oop, который создает их на экране.

class MovingObj(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((30, 30))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(WIDTH)
        self.rect.y = HEIGHT / 2
        self.speedx = -4

    def update(self):
        self.rect.x += self.speedx
        if self.rect.x <= 0:
            self.rect.x = 480
            self.rect.y = HEIGHT / 2
            self.speedx = -4

all_sprites = pygame.sprite.Group()
movingobj = pygame.sprite.Group()

for i in range (3):
    obj = MovingObj()
    all_sprites.add(obj)
    movingobj.add(obj)

running = True
while running:

    clock.tick(FPS)

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            running = False

    all_sprites.update()
    screen.fill(BLACK)
    all_sprites.draw(screen)
    pygame.display.flip()

pygame.quit()
quit()

Прямо сейчас у меня есть self.rect.x = random.randrange(WIDTH) Я пытаюсь выяснить, как сделать первый спавн в self.rect.x = 45 Затем оставьте два других спавна на 90 пикселей друг от друга. Есть ли способ сделать это в том же классе и как я его настроил?

1 Ответ

1 голос
/ 23 февраля 2020

У вас есть 2 возможности:

Либо добавить атрибуты класса next_x = 45, которые используются для установки позиции объекта x. Атрибут должен быть увеличен на 90 после того, как он используется для установки местоположения объекта:

class MovingObj(pygame.sprite.Sprite):

    next_x = 45 

    def __init__(self, x):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((30, 30))
        self.image.fill(RED)
        self.rect = self.image.get_rect()

        self.rect.x = MovingObj.next_x
        MovingObj.next_x += 90 

        self.rect.y = HEIGHT / 2
        self.speedx = -4

Или добавить аргумент в конструктор класса и вычислить позицию при создании экземпляры объектов в l oop.

Добавить аргумент x в класс MovingObj:

class MovingObj(pygame.sprite.Sprite):
    def __init__(self, x):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((30, 30))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = HEIGHT / 2
        self.speedx = -4

Вычислить позицию в l oop (45 + i*90):

for i in range (3):
    obj = MovingObj(45 + i*90)
    all_sprites.add(obj)
    movingobj.add(obj)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...