2
我一直在玩Kivy Pong教程,加快框架的速度,看看我是否可以實現一些想法。我已經刪除了大部分Pong功能,所以我只能在屏幕上彈起球並添加一些代碼,以在屏幕上生成多個彈跳球,並在觸摸時生成。這工作得很好。然後我添加了一些額外的畫布指示,所以我會畫一條線指示球正在移動的方向。這是奇怪的地方。第一個球就像它應該在屏幕上彈跳一樣。但是任何下面的點擊都會產生脫離屏幕的球,隨機改變方向和速度,並且一般表現爲混亂。我一直在看我的代碼,我似乎無法找到任何可能出錯的跡象。我保留所有對小部件的引用,我將它們添加到根小部件中,我似乎沒有在它們之間共享任何信息......無論如何,這裏是代碼,也許有人可以啓發我。使用最新的kivy和python 3.6。Kivy小部件的行爲不規律
from random import randint from kivy.app import App from kivy.clock import Clock from kivy.config import Config from kivy.vector import Vector from kivy.uix.widget import Widget from kivy.properties import AliasProperty, ListProperty, NumericProperty, ReferenceListProperty class Playground(Widget): critters = ListProperty([]) def update(self, dt): for critter in self.critters: critter.move() if (critter.y self.height): critter.v_y *= -1 if (critter.x self.width): critter.v_x *= -1 self.score.text = "{}".format(len(self.critters)) def on_touch_down(self, touch): critter = Critter() critter.pos = touch.x, touch.y self.critters.append(critter) self.add_widget(critter) class Critter(Widget): angle = NumericProperty(0) v_x = NumericProperty(0) v_y = NumericProperty(0) velocity = ReferenceListProperty(v_x, v_y) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.velocity = Vector(5, 0).rotate(randint(0, 360)) self.angle = Vector(*self.velocity).angle(Vector(1, 0)) def move(self): self.pos = Vector(*self.velocity) + self.pos self.angle = Vector(*self.velocity).angle(Vector(1, 0)) class WorldApp(App): def build(self): game = Playground() Clock.schedule_interval(game.update, 1.0/60.0) return game if __name__ == '__main__': Config.set('kivy', 'desktop', 1) Config.set('kivy', 'exit_on_escape', 1) Config.set('graphics', 'resizable', 0) WorldApp().run()
和KV文件
<Playground> score: score canvas: Color: rgb: 0.0, 0.1, 0.0 Rectangle pos: self.pos size: self.size Label: id: score pos: self.parent.width - self.size[0], self.parent.height - self.size[1] font_size: 16 size: self.texture_size <Critter> size: 30, 30 canvas: Rotate: angle: self.angle origin: self.center axis: 0, 0, 1 Color: rgb: 0.5, 0.0, 0.0 Ellipse: pos: self.pos size: self.size Color: rgb: 1, 1, 0.0 Line: width: 2 points: self.center[0], self.center[1], self.center[0] + self.size[0]/2, self.center[1]
我沒有定義任何更多小部件。但我想知道是否有多個以不同角度旋轉的小部件是問題。我會嘗試推/解決方案。 –
這有幫助!現在我得到了預期的行爲。現在我會陷入困境,試圖找出爲什麼我需要流行/推動,但那只是我:) –