我有几个问题:
我有旋转球的动画,该动画应始终位于屏幕顶部,并且屏幕应始终仅显示其中一半。我可以做到,但是只能通过单击按钮来调用将球带到正确位置的函数。我不仅需要球始终位于正确的位置,而且还需要单击按钮。我尝试使用 init 函数,但是它总是给我这个错误:'super'对象没有属性' getattr '。我还尝试使用 getattr 而不是 init ,但是并不能将球放到正确的位置。
所以我想单击一个按钮,并且发球开始旋转几秒钟。当它停止时,我希望球成为另一种颜色甚至球的另一种图像。我尝试使用on_complete,但我不知道应该在哪里使用它。
我的主要py文件:
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder
from kivy.animation import Animation
from kivy.properties import NumericProperty
class OpenScreen(Screen):
angle = NumericProperty(0)
#Trying to make __init__ function
#def __init__(self, **kwargs):
#super(OpenScreen, self).__init__(**kwargs)
#y = self.height
#y1 = self.width / 2
#self.ids.test.pos = 0, y - y1
#Function of taking ball in the right place and spinning it
def z(self):
anim = Animation(angle=360, duration=0.5)
anim += Animation(angle=360, duration=0.5)
anim.start(self)
y = self.height
y1 = self.width / 2
self.ids.test.pos = 0, y - y1
self.ids.test.source = 'redball.png'
def on_angle(self, item, angle):
if angle == 360:
item.angle = 0
...screens classes...
GUI = Builder.load_file('game.kv')
class GameApp(App):
def build(self):
return GUI
def change_screen(self, screen_name):
screen_manager = self.root.ids['screen_manager']
screen_manager.current = screen_name
GameApp().run()
我的Openscreen.kv文件:
#:kivy 1.10.1
<OpenScreen>:
FloatLayout:
canvas:
Rectangle:
size: self.size
pos: self.pos
source: 'bg.png'
Image:
id: test
size_hint_y: None
height: self.width
source: 'blueball.png'
allow_stretch: True
keep_ratio: False
canvas.before:
PushMatrix
Rotate:
angle: root.angle
axis: 0, 0, 1
origin: self.center
canvas.after:
PopMatrix
Button:
text: "spin"
font_size: self.height - 29
valign: 'middle'
halign: 'center'
padding: 2,2
size_hint: .7, .1
pos_hint:{"x":.15, "y":.585}
background_color: 0,0,0,0
on_press:
root.z()
....
我该怎么做?
答案 0 :(得分:0)
您可以使用numbers = [8, 18, 2, 4]
maxlen=len(numbers)
i=0
while i<maxlen:
print (i, numbers[i])
i=i+1
通过以下方式开始动画:
print(i, numbers[i], end=' ')
您将需要向Clock.schedule_once()
方法添加一个def __init__(self, **kwargs):
super(OpenScreen, self).__init__(**kwargs)
Clock.schedule_once(self.z)
参数,并利用dt
事件,如下所示:
z()
然后将on_complete
方法用作:
def z(self, dt):
anim = Animation(angle=360, duration=0.5)
anim += Animation(angle=360, duration=0.5)
anim.bind(on_complete=self.switch_source)
anim.start(self)