Pregunta

Tratando de hacer un ladrillo widget de cambio de tamaño cada vez que se reapariciones.

El archivo py

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)

y el kv archivo

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

Esencialmente, el nivel 0 deben tener los ladrillos con una longitud de 100, una vez que se rompe es el que va a nivel 1 y debe spawn de ladrillos con una longitud de 75, pero se queda al 100

¿Fue útil?

Solución

BrickGreen.brickwidth = 100

Esto reemplaza el NumericProperty a nivel de clase con el número 100.Usted necesita para establecer el valor de brickwidth para las instancias de los objetos, no de la duración de las clases.En este caso, usted podría, por ejemplo, pasar el ancho que desee para su spawn_brick método y utilizarlo cuando se ejecuta el BrickGreen.

También deberá declarar la NumericProperty a nivel de clase, no en el interior __init__.

Sugiero la lectura de la kivy documentación sobre las propiedades y va a través de los ejemplos para ver cómo estos deben ser usados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top