1

私はすべてのコードを単独で動作させています。ただし、すべてをボタンにリンクする必要があります。

質問: 複数のボタンを衝突のためにスプライトとして設定しようとしています。クラスの外でそれを行う方法がわかりません。

別のクラスで動作するボタンがありますが、2 番目の self.image が最初のボタンを上書きしているという明白な理由により、同じクラスで動作させることはできません。

class Icons(pygame.sprite.Sprite):
def __init__(self, *args):
    pygame.sprite.Sprite.__init__(self, *args)

    self.image = pygame.image.load("images/airbrushIC.gif").convert()
    self.rect = self.image.get_rect()
    ic1 = self.image
    self.rect.x = 50
    self.rect.y = 490

    self.image = pygame.image.load("images/fillIC.gif").convert()
    self.rect = self.image.get_rect()
    ic2 = self.image
    self.rect.x = 10
    self.rect.y = 540


def update(self):
    pygame.mouse.get_pos()
    pygame.mouse.get_pressed()

このコードはクラスである必要はありません。しかし、クラス内にいなくても画像をスプライトにする方法がわかりません。どんな助けでも感謝します!

4

1 に答える 1

1

Icons の代わりに、汎用の Icon クラスが必要です。次に、各ボタンの Icon のインスタンスを作成できます。

class Icon(pygame.sprite.Sprite):
    def __init__(self, image_name, pos, cb, cb_data, *args):
        pygame.sprite.Sprite.__init__(self, *args)

        self.image = pygame.image.load("images/" + image_name).convert()
        self.rect = self.image.get_rect()

        self.rect.x = pos[0]
        self.rect.y = pos[1]

        this.cb = cb              # function to call when button is pressed
        this.cb_data = cb_data    # data to pass to the function

    def pressed():
        this.cb(cb_data)

次に、メイン関数でボタンを作成します。

ic1 = Icon("airbrushIC.gif", (50, 490), button_pressed, "airbrushIC")
ic2 = Icon("fillIC.gif", (10, 540), button_pressed, "fillIC")
buttons = [ic1, ic2]

def button_pressed(data):
    print "Button pressed:" + str(data)

最後に、すべてのマウス ダウン イベントに対して、ボタンの衝突を探します。

for b in buttons:
    if b.rect.collidepoint(event.pos):
         b.pressed()
于 2012-06-17T19:29:20.747 に答える