es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer que las imágenes se muevan en Kivy.

Estoy tratando de hacer que mi imagen de pájaro suba y luego baje automáticamente. Estaba viendo un video de YouTube sobre esto, aquí está el enlace https://www.youtube.com/watch?v=2dnohAqkus&abchannel=ErikSandberg Parece que está funcionando para él, pero no para mí. Aproximadamente en el minuto 14 comienza a codificar sobre lo que estoy hablando. Una cosa que sí funciona para mí es cuando hago clic en la pantalla, el pájaro cambia. Aquí está mi código:

class GameScreen(Screen):
pass


class Bird(Image):
    velocity = NumericProperty(0)

def on_touch_down(self, touch):
    self.source = "icons/bird2.png"
    self.velocity = 150
    super().on_touch_down(touch)

def on_touch_up(self, touch):
    self.source = "icons/bird1.png"
    super().on_touch_up(touch)


def move_bird(self, time_passed):
    bird = self.root.ids.bird
    bird.y = bird.y + bird.velocity * time_passed
    bird.velocity = bird.velocity - self.GRAVITY * time_passed

    Clock.schedule_interval(self.move_bird, 1/60)

Mi código Kivy (nota: esto está dentro de un FloatLayout):

Bird:
    source: "icons/bird1.png"
    size_hint: None, None
    size: 475, 475
    pos_hint: { "center_x": .5, "center_y": .4}
    id: bird
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con su código es que el pájaro no se mueve automáticamente hacia arriba y hacia abajo como se desea. Para lograr esto, deberá agregar algún código adicional dentro del método move_bird.

    En primer lugar, querrá definir una variable para llevar un registro de la posición inicial del pájaro cuando comienza a moverse hacia arriba. Esto se puede hacer agregando un nuevo atributo a la clase Bird:

    class Bird(Image):
        velocity = NumericProperty(0)
        initial_y = NumericProperty(0)
    

    Luego, puede actualizar el método on_touch_down para establecer la posición inicial:

    def on_touch_down(self, touch):
        self.source = "icons/bird2.png"
        self.initial_y = self.y
        self.velocity = 150
        super().on_touch_down(touch)
    

    A continuación, querrá modificar el método move_bird para comprobar si el pájaro está por encima de su posición inicial y, si es así, empezar a moverlo hacia abajo:

    def move_bird(self, time_passed):
        bird = self.root.ids.bird
        bird.y = bird.y + bird.velocity * time_passed
        bird.velocity = bird.velocity - self.GRAVITY * time_passed
    
        if bird.y < bird.initial_y:
            bird.velocity = 0
            bird.y = bird.initial_y
    
        Clock.schedule_interval(self.move_bird, 1/60)
    

    Con estas modificaciones, el pájaro debería moverse hacia arriba cuando se hace clic en él y luego volver automáticamente hacia abajo. Asegúrese de buscar cualquier problema adicional, como el pájaro que continúa moviéndose hacia arriba indefinidamente, y ajustar el código en consecuencia.

    ¡Buena suerte!

Comments are closed.