#python #class #methods #pygame
#python #класс #методы #pygame
Вопрос:
Я использую Pygame, чтобы попытаться передать класс в качестве аргумента в функции, чтобы я мог вызвать метод, а не весь класс. Каждый раз, когда я передаю аргумент class, кажется, что он запускает класс, и поскольку он находится в цикле, это довольно быстро сокращает его. Кто-нибудь может помочь сделать это? Также мой код структурирован нормально? Я пытаюсь удалить капли дождя из группы, а затем сгенерировать новую строку, но пока просто пытаюсь придумать способ удаления капель дождя из группы. Спасибо!!! Кстати, немного новичок в Python и кодировании в целом (не считая HTML5 и CSS3).
Я попытался установить класс в качестве переменной (drop = Droplet()), а затем попытаться запустить функцию для удаления. Я также пытался установить функцию внутри класса в качестве метода, и это тоже не удалось. Я действительно ценю любую помощь. Спасибо! Я провел исчерпывающее исследование Stack Overflow и в 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()
В конечном итоге я просто получил тонну дождевых капель, генерируемых одновременно, что замедляет его. Я бы хотел, чтобы он удалил raindrop в группе, а затем перешел оттуда и сгенерировал новую строку. Как дождь на экране.
Ответ №1:
Вы должны создать 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()
Создайте группу и добавьте drops:
например
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)
Комментарии:
1. Должен ли я использовать drop = Droplet() в качестве глобальной переменной?
2. Почему, если не screen.get_rect().contains(drop.rect): не становится true после того, как капля дождя покидает экран и предположительно rect?
3. Спасибо Rabbid76! Ты потрясающий! Я поддержал ваш ответ, но я слишком новичок, чтобы иметь в виду что-либо здесь. Но я вам благодарен!