Я учусь использовать Kivy, поэтому я прошел через учебник понга и начал возиться с кодом. Итак, я удалил все, кроме прыгающего мяча, и решил создать несколько мячей по требованию. Проблема, с которой я сталкиваюсь, заключается в том, что, хотя я могу разместить шары, где я хочу их, когда приложение уже запущено (например, добавление шара при касании отлично работает), но когда я добавляю шары в app build(), они не получают размещен справа. Вот код, который у меня есть. Шары, расположенные на ощупь, правильно начинаются с центра. Но шар, добавленный в build(), начинается с нижнего левого угла. Зачем? Я хотел добавить больше движущихся виджетов с разными свойствами, но я не могу понять, как их разместить при запуске приложения.Виджеты центра в Kivy
#:kivy 1.0.9 <World>: canvas: Ellipse: pos: self.center size: 10, 10 <Agent>: size: 50, 50 canvas: Ellipse: pos: self.pos size: self.size
from random import randint from kivy.app import App from kivy.uix.widget import Widget from kivy.properties import NumericProperty, ReferenceListProperty, ListProperty from kivy.vector import Vector from kivy.clock import Clock class World(Widget): agents = ListProperty() def add(self): agent = Agent() agent.center = self.center agent.velocity = Vector(4, 0).rotate(randint(0, 360)) self.agents.append(agent) self.add_widget(agent) def on_touch_down(self, touch): self.add() def update(self, dt): for agent in self.agents: agent.move() if agent.y < 0 or agent.top > self.height: agent.velocity_y *= -1 if agent.x < 0 or agent.right > self.width: agent.velocity_x *= -1 class Agent(Widget): velocity_x = NumericProperty(0) velocity_y = NumericProperty(0) velocity = ReferenceListProperty(velocity_x, velocity_y) def move(self): self.pos = Vector(*self.velocity) + self.pos class WorldApp(App): def build(self): world = World() # add one ball by default world.add() Clock.schedule_interval(world.update, 1.0/60.0) return world if __name__ == '__main__': WorldApp().run()