Не могу исправить баг (при запуске программы две созданных копии спрайта не отлитают друг от друга) python 3.8.10; elementary os основана на ubuntu

LehaHot

Новичок
Пользователь
Апр 17, 2022
4
0
1
Весь код:
Python:
from random import *

class personass(pygame.sprite.Sprite): # Создаём спрайт персонажа
    def __init__(self, image_file2, location2, speed):
        pygame.sprite.Sprite.__init__(self) # Инициализируем спрайт
        self.image = pygame.image.load(image_file2)
        self.rect = self.image.get_rect() # Создаём хит-бокс персонажу
        self.rect.left, self.rect.top = location
        self.speed = speed
    def move(self): # Создаём фуннкцыю для перемещение
        self.rect = self.rect.move(self.speed) # Придаём хит-боксу с текстуркой скорость перемещение
        if self.rect.left < 0 and self.rect.right > wisota:
            self.speed[0] = -self.speed[0]
        if self.rect.top < 0 and self.rect.bottom > shirina:
            self.speed[1] = -self.speed[1]
def animate(group): # Создаём группу для обнуружение столкновений
    screen.fill([0, 0, 0]) # Заливаем экран чёрным цветом    perr.move()
    for perr in group: # Цыкл для обнуружение столкновений

        group.remove(perr) # Удаляем из группы спрайт perr
        if pygame.sprite.spritecollide(perr, group, False):
            perr.speed[0] = -perr.speed[0]
            perr.speed[1] = -perr.speed[1]
        group.add(perr) # Добавляем в группу спрайт perr
        screen.blit(perr.image, perr.rect)
    pygame.display.flip() # Обновляем экран
    pygame.time.delay(20) # Ждём 20 мили-сек

size = wisota, shirina = 640, 505
screen = pygame.display.set_mode(size)
screen.fill([0, 0, 0])
img_file2 = '1-бег вправо.png'
sparaiti = pygame.sprite.Group() # Создаём группу спрайтов
for topp2 in range(0, 2):
    for cc2 in range(0, 2):
        location2 = [cc2 * 180 + 10, topp2 * 180 + 10]
        speed2 = [choice([-2, 2]), choice([-2, 2])] # choice это рандом допустим от 1 до 3
        perr = personass(img_file2, location2, speed2)
        sparaiti.add(perr) # Каждый раз добавляем в группу спрайт

run = True
while run:
    animate(sparaiti) # Вызывае функцыю animate и передаём в неё группу
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            pygame.quit()
При запуске программы два созданных спрайта не отлитают друг от друга!
 

Вложения

  • кк.png
    кк.png
    132,2 КБ · Просмотры: 1

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
При запуске программы два созданных спрайта не отлитают друг от друга!
При запуске вашего кода спрайты не двигаются потому, что у них не вызывается метод move.
Можно его вызвать в основном цикле и спрайты будут двигаться:
Python:
run = True
while run:
    animate(sparaiti) # Вызывае функцыю animate и передаём в неё группу
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            pygame.quit()
    for s in sparaiti:
        s.move()
 

Форум IT Специалистов