Frage

Ich versuche, die Größe eines Ziegel-Widgets jedes Mal zu ändern, wenn es neu erscheint.

Die py-Datei hat

class Game(FloatLayout):
    player = ObjectProperty(None)
    playbutton = ObjectProperty(None)
    ratebutton = ObjectProperty(None)
    brickg = ObjectProperty(None)
    ballsin = NumericProperty(0)
    bricklist = ListProperty([])
    score = NumericProperty(0)
    switch = NumericProperty(0)
    level = NumericProperty(0)

     def __init__(self, *args, **kwargs):
        super(Game, self).__init__(*args, **kwargs)
        Clock.schedule_interval(self.update, 1./60)

    def spawn_brick(self, *args):
        b2 = BrickGreen(x=randint(50, self.width - 50), \
        y=randint(self.height - self.height / 4, self.height - (self.height/13)))
        self.bricklist.append(b2)
        self.add_widget(b2)

    def check_brick_spawn(self, *args):

        if len(self.bricklist) == 0:
            if self.level == 0:
                BrickGreen.brickwidth = 100
                self.spawn_brick()
            elif self.level == 1:
                BrickGreen.brickwidth = 75
                self.spawn_brick()
            else:
                BrickGreen.brickwidth = 50
                self.spawn_brick()

class BrickGreen(Widget):
    def __init__(self, **kwargs):
        super(BrickGreen, self).__init__(**kwargs)

        brickwidth = NumericProperty(0)

und die kv-Datei hat

<BrickGreen>:
    size_hint: None, None
    size: self.brickwidth, 25
    canvas:
        Color:
            rgba: 0, 1, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size

Im Wesentlichen sollte Level 0 Steine ​​mit einer Länge von 100 haben. Sobald es kaputt geht, geht es auf Level 1 über und sollte Steine ​​mit einer Länge von 75 hervorbringen, aber es bleibt bei 100

War es hilfreich?

Lösung

BrickGreen.brickwidth = 100

Dadurch wird die NumericProperty auf Klassenebene durch die Zahl 100 ersetzt.Sie müssen den Wert für die Ziegelbreite festlegen Instanzen Ihrer Objekte, nicht der Klassen selbst.In diesem Fall könnten Sie (zum Beispiel) die gewünschte Breite an Ihr übergeben spawn_brick Methode und verwenden Sie sie beim Instanziieren von BrickGreen.

Sie müssen NumericProperty auch auf Klassenebene deklarieren, nicht innerhalb __init__.

Ich empfehle, die Kivy-Dokumentation zu Eigenschaften zu lesen und die Beispiele durchzugehen, um zu sehen, wie diese verwendet werden sollten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top