1
私はKivyを使うことを学んでいるので、私はPongチュートリアルを歩き、コードを使いこなし始めました。だから、私はバウンスボール以外のすべてを取り除き、必要に応じて複数のボールを生成することに決めました。私が抱えている問題は、アプリケーションが既に動作しているときにボールを置くことができますが(例えば、タッチでボールを追加するなど)、アプリビルドでボールを追加すると右に配置。ここに私のコードがあります。接触したボールは、中心から正しく始まります。しかし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()