Kivy重复Ball Widget问题求助:仅需一个弹跳小球
问题原因
你遇到的两个球的问题,根源在于kv文件里给Balls控件设置的center: self.parent.center属性绑定。当你通过move方法修改球的位置时,这个绑定规则会立即把球的中心重置回父控件(BallsLogic)的中心。在同一帧渲染周期内,球先被移动到新位置,又被绑定强制拉回中心,最终呈现出“一个移动、一个静止”的视觉效果——其实是同一帧里绘制了两个位置的球。
解决方案
需要移除冲突的属性绑定,同时手动初始化球的初始位置:
- 修改kv文件,去掉Balls控件的
center: self.parent.center规则:
#kivy 1.0.9 <Balls> size:50,50 canvas: Ellipse: size: self.size pos: self.pos <BallsLogic> ball: ball Balls: id: ball
- 在Python代码的
BallsLogic.start()方法里,手动设置球的初始中心位置:
def start(self): self.ball.center = self.center # 初始化到屏幕中央 self.ball.velocity = 10, -3
修改后,球的位置完全由move方法和碰撞逻辑控制,不会再被绑定规则干扰,屏幕上就只会显示一个正常弹跳的球了。
内容的提问来源于stack exchange,提问作者magic-chef
相关产品推荐
相关产品推荐

