完成了官方Kivy网站上的Pong游戏教程后,我继续学习他们的速成课程。在第一个视频中,我看到了这个神奇的东西,称为Scatter,它几乎可以让你通过鼠标轻松移动UI元素。
我认为这应该提供了一种更平滑的方式来控制 Pong游戏中的挡板。最初的方法是将挡板移动逻辑放入PongGame对象的
这会导致一个令人不舒服的开始,如果你碰巧将鼠标光标移动到球拍的下面或上面。我认为Scatter会更好地工作。但是,到目前为止,我未能使其起作用。
我首先注释了
我认为这应该提供了一种更平滑的方式来控制 Pong游戏中的挡板。最初的方法是将挡板移动逻辑放入PongGame对象的
on_touch_move()
方法中(PongGame类继承自Widget),这很简单:if touch.x < self.width / 3: # if you clicked in 1/3 of the window to the left
player1.center_y = touch.y # level the first paddle's center vertically with the mouse click position
这会导致一个令人不舒服的开始,如果你碰巧将鼠标光标移动到球拍的下面或上面。我认为Scatter会更好地工作。但是,到目前为止,我未能使其起作用。
我首先注释了
on_touch_move()
方法,然后在pong.kv
文件中将Scatter对象添加为PongGame类的子级,并将现有的PongPaddle对象设置为Scatter对象的子级。像这样:<PongGame>:
Scatter:
do_scale: False
do_rotation: False
do_translation_x: False
PongPaddle:
id: player_left
x: root.x
center_y: root.center_y
PongPaddle:
id: player_right
x: root.width - self.width
center_y: root.center_y
由于我使用了一个单一的散点对象,而且两个挡板需要独立移动,所以我想这可能会导致问题(点击一个会使两个同时移动),但我仍然认为这是一个好的开始。
没有运气!这不会让挡板随着鼠标光标移动。它们仍然弹跳球(即使它们在小部件树中向下移动,除了在PongGame类体中注释掉on_touch_move()
方法之外,我没有改变Python代码 - 我想在pong.kv
文件中连接到挡板的ObjectProperty实例引用仍然有效),但它们不会移动。
有什么办法可以让它工作吗?