Ваш код в основном работает.Довольно простое решение - просто изменить Ball
на Image
(вместо Widget
) и добавить size_hint: None, None
.
Итак, объявление класса Ball
становится:
class Ball(Image):
Сам класс может оставаться прежним
Правило для Ball
в вашем файле kv
упрощено до:
<Ball>:
source: '58-Breakout-Tiles.png'
И в вашем GameScreen
правило, раздел Ball
становится:
Ball:
id: ball
size_hint: None, None
center: self.parent.center
Просто добавьте size_hint
.
Я думаю, этого достаточно, чтобы заставить его работать.
В качестве альтернативы,Вы можете просто добавить size_hint
к своему Ball
как:
Ball:
id: ball
size_hint: None, None
center: self.parent.center
и изменить pos: self.pos
на pos: root.pos
в своем правиле <Ball>:
следующим образом:
<Ball>:
Image:
source: '58-Breakout-Tiles.png'
size: 15, 15
pos: root.pos
Основная проблема с исходным кодом заключается в том, что добавление Image
к Widget
означает просто добавление дочернего элемента к Ball
Widget
.Widget
, который не является Layout
, не обрабатывает рисование своих дочерних элементов.Оригинальная игра Pong
позволяет обойти это, поместив изображение мяча в Canvas
из Ball
Widget
.Класс Image
в основном делает это для вас.