@Slavkha

Как int из rect float?

Мне нада чтобы пулька перемешалась со скорость 0.1 после get_rect перемещение только в целочисленном виде.
Везде подставлял float(0.1) где не ругается но прибавление идёт на 1

import pygame.image

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.speed_x = speed_x
        self.speed_y = 0.1

    def update(self):
        if self.rect.y > 0:
            self.rect.y -= self.speed_y
            self.rect.x += self.speed_x
        else:
            self.kill()
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 2
@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()
Ответ написан
@kilinfox
Ты хочешь, чтобы он двигался на 0.1 пикселя? думаю, это нереально, лучше сделай задержку, чтобы он 10 раз пропускал передвижение по оси y, а потом передвигался на один пиксель.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы