有没有一种方法可以在不运行整个类的情况下将类作为参数传递给函数?

时间:2019-03-27 16:56:24

标签: python class methods pygame

我正在使用Pygame尝试将类作为函数的参数传递,以便可以调用方法,而不是整个类。每次我传递类参数时,它似乎都在运行该类,并且由于它处于循环状态,因此可以很快地将其磨碎。有人可以帮忙吗?我的代码结构还可以吗?我正在尝试从一个组中删除雨滴,然后生成一个新行,但是现在,我只是想办法从该组中删除雨滴。谢谢!!!顺便说一句,这是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()

最终,我一下子就产生了很多雨滴,这使雨滴变慢了。我希望删除组中的雨滴,然后从那里开始并生成新行。就像在屏幕上下雨一样。

1 个答案:

答案 0 :(得分:1)

您必须创建一个Droplet对象并将该对象传递给函数。

但是,我建议使用pygame.sprite.Group

.update类中添加一个Droplet方法,该方法具有y移动功能,如果掉落在地面上则“杀死”掉落物。传递给.update的{​​{1}}方法的所有参数都委托给所包含元素的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提供了一种.draw方法,该方法可以“遮盖”组的每个表面-为此,pygame.sprite.Group和{{1} Sprite的}属性必须设置。

.rect