Есть ли способ передать класс в качестве аргумента в функцию без запуска всего класса? - PullRequest
2 голосов
/ 27 марта 2019

Я использую Pygame, чтобы попытаться передать класс в качестве аргумента функции, чтобы я мог вызывать метод, а не весь класс.Каждый раз, когда я передаю аргумент класса, кажется, что он запускает класс, и, поскольку он находится в цикле, он довольно быстро его измельчает.Кто-нибудь может помочь сделать это?Также мой код структурирован нормально?Я пытаюсь удалить капли дождя из группы, а затем создать новую строку, но сейчас просто пытаюсь найти способ удаления капель дождя из группы.Спасибо!!!Кстати, немного нового для Python и кодирования в целом (не считая HTML5 и CSS3).

Я попытался установить класс в качестве переменной (drop = Droplet ()), а затем попытаться запустить функцию для удаления,Я также попытался установить функцию внутри класса как метод, но и это не удалось.Я действительно ценю любую помощь.Спасибо!Я провел исчерпывающее исследование переполнения стека и Google.Я попробовал .kill и .remove.

class Droplet(Sprite):
    def __init__(self):
        super(Droplet, self).__init__(rainfall)
        self.screen = screen
        self.screen_rect = screen.get_rect
        self.image = pygame.image.load('images/Glossy_Raindrop.bmp')
        self.rect = self.image.get_rect()
        self.rect.x = self.rect.width
        self.rect.y = self.rect.height

    def blitme(self):
        self.screen.blitme(self.image, self.rect)


def dropground(Droplet):
    drop = Droplet()
    screenie = screen.get_rect()
    if not screen.get_rect().contains(drop.rect):
        print("delete")
        drop.kill()


def update_screen(rainfall):
    screen.fill((135, 206, 235))
    print(len(rainfall))
    rain_y_move(Droplet, rainfall)
    dropground(Droplet)
    rainfall.draw(screen)
    pygame.display.flip()

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

1 Ответ

1 голос
/ 27 марта 2019

Вы должны создать объект Droplet и передать объект функциям.

Но я рекомендую использовать pygame.sprite.Group.

Добавьте метод .update к классу Droplet, который разбивает движение y и "убивает" падение, если оно упало на землю. Все параметры, которые передаются методу .update Group, делегируются методу .updtate содержащихся элементов:

class Droplet(Sprite):

   # [...]

   def update(self)

       self.rect = self.rect.move(0, speed)           

       screenie = screen.get_rect()
       if not screen.get_rect().contains(self.rect):
           print("delete")
           self.kill()    

Создайте группу и добавьте капли:

, например

rainfall = pygame.sprite.Group()
my_drop = Droplet()
rainfall.add(my_drop)

Droplet.blitme можно удалить, потому что pygame.sprite.Group предоставляет метод .draw, который "отбрасывает" каждую поверхность группы - для этого атрибуты .rect и .image Sprite должен быть установлен.

def update_screen(rainfall):
    screen.fill((135, 206, 235))
    print(len(rainfall))

    rainfall.update();
    rainfall.draw(screen)        

    pygame.display.flip()

while run:

    update_screen(rainfall)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...