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]
我没有定义任何更多小部件。但我想知道是否有多个以不同角度旋转的小部件是问题。我会尝试推/解决方案。 –
这有帮助!现在我得到了预期的行为。现在我会陷入困境,试图找出为什么我需要流行/推动,但那只是我:) –