【问题标题】:how to move image in kivy only when image is pressed on仅在按下图像时如何在kivy中移动图像
【发布时间】:2021-11-26 18:33:31
【问题描述】:

我正在用 kivy 制作游戏,我希望图像仅在按下图像时移动,但目前,如果按下屏幕中的任何位置,图像就会移动。下面是我的代码!

main.py

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


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

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


class MainApp(App):
    GRAVITY = 300


def move_ball(self, time_passed):
    ball = self.root.ids.game_screen.ids.ball
    ball.y = ball.y + ball.velocity * time_passed
    ball.velocity = ball.velocity - self.GRAVITY * time_passed

main.kv

Ball:
        source: "icons/ball.png"
        size_hint: None, None
        size: 500, 500
        pos_hint: {"center_x": 0.5}
        id: ball

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    您需要确定press 是否真的在Image 上。为此,您可以使用collide_point(),如documentation 中所述:

    on_touch_down(), on_touch_move(), on_touch_up() 不做任何类型的 碰撞。如果您想知道触摸是否在您的小部件内部, 使用 collide_point()。

    所以尝试将on_touch_down() 更改为:

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            self.source = "icons/ball.png"
            self.velocity = 275
        return super().on_touch_down(touch)
    

    on_touch_up()类似。

    【讨论】:

    • 嘿,谢谢你的帮助,但是现在如果我按下屏幕的不同部分,比如在角落里,什么都不会发生,这正是我想要的,但是,如果我靠近图像而不是完全按下图像它仍然移动。我怎样才能使它只有在它被按下时才会移动。
    • collide_point() 确定点击是否在 Image 小部件 (Ball) 上。但是您看到的是texture,它可能不会填满整个Ball 小部件。要尝试使纹理与Ball 小部件匹配,请尝试添加allow_stretch: True。您可能还想添加keep_ratio: True 以保持球的外观。并确保Ball 的纵横比与源图像的纵横比相匹配。
    • 我该怎么做?你能帮我么!谢谢
    • 只需将keep_ratio: Trueallow_stretch: True 添加到kv 规则中即可获得Ball
    • 我试过了,但还是不行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2021-02-24
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多