• Как int из rect float?

    @o5a
    Хранить эти положения отдельными переменными (где они будут float), и только потом присваивать их самим rect.x/y
    Тут для примера я завел отдельные (rx/ry), но можно использовать и уже заведенные x/y только с учетом, что это предполагалось как центр объекта.
    ..
        class Bullet(pygame.sprite.Sprite):
            def __init__(self, screen, speed_x):
                pygame.sprite.Sprite.__init__(self)
                self.x, self.y = 550.0, 450.0
                self.screen = screen
                self.image = pygame.image.load("img/bullet.png").convert()
                self.rect = self.image.get_rect(center=(self.x, self.y))
                # для хранения наших координат
                self.rx, self.ry = self.rect.x, self.rect.y
                self.speed_x = speed_x
                self.speed_y = 0.1
    
            def update(self):
                if self.ry > 0:
                    self.ry -= self.speed_y
                    self.rx += self.speed_x
                    # и вот теперь уже присваиваем значения
                    self.rect.x, self.rect.y = self.rx, self.ry
                else:
                    self.kill()


    Можно и напрямую присваивать x/y (без этих rx/ry) только работать с rect.centerx:
    ..
            def update(self):
                if self.y > 0:
                    self.y -= self.speed_y
                    self.x += self.speed_x
                    self.rect.centerx, self.rect.centery = self.x, self.y
                else:
                    self.kill()
    Ответ написан
    1 комментарий
  • Почему возникает ошибка "missing 1 required positional argument: 'self'"?

    Slavkha, открой для себя тэг "Исходный код". Без него глазам больно.
    По делу - cheng_baloon нужно вызывать из объекта, а не из класса.
    Должно быть примерно так:
    baloon = Baloon(screen, baloon[0], baloon[1], rect_baloon) 
    ...
    baloon.cheng_baloon()
    Ответ написан
    Комментировать