是的,这是可能的,这是您的Sprite类,它只使用python代码进行旋转。这里唯一的一件事是——kv lang的诞生是有原因的!这让这件事变得容易多了。我强烈建议保留kv代码。无论如何,回答你的问题:关键是
或者,您可以使用
bind
self.rot.angle = self.angle
然后后来,,
self.bind(angle=on_angle)
哪一个叫你的
on_angle
self.angle
变化。你必须定义一个
self.on_angle
应该重置的功能
自己旋转角度=自身。角
. KV lang会自动为您执行此操作,为您节省大量代码。以千伏为单位,
angle: self.angle
自动更新
angle
在任何时候都是可变的
变量变化,意味着不玩
作用
这是你的雪碧课。注意这两行
self.rot.origin = self.center
self.anim.start(self.rot)
class Sprite( Image ):
angle = NumericProperty(0)
def __init__( self, x=0, y=0, **kwargs ):
super( Sprite, self ).__init__( **kwargs )
# define the rotation
with self.canvas.before:
PushMatrix()
self.rot = Rotate()
self.rot.angle = 0
self.rot.origin = self.center
self.rot.axis = (0, 0, 1)
with self.canvas.after:
PopMatrix()
self.size_hint = (None, None) # tell the layout not to size me
self.angle = 0
self.source = 'alien.png'
self.size = self.texture.size
if ( x == 0 and y == 0 ):
self.pos = ( random.randrange(0,WINDOW_WIDTH) , random.randrange(0,WINDOW_HEIGHT) )
else:
self.pos = ( x,y )
self.rot.origin = self.center # Reset the center of the Rotate canvas instruction
self.animate() # start moving animation
def animateComplete( self, *kargs ):
Animation.cancel_all( self ) # is this needed?
self.rot.angle = 0
self.animate()
def animate( self ):
self.anim = Animation( angle=360, duration=1 )
self.anim.bind( on_complete=self.animateComplete )
self.anim.repeat = True
self.anim.start( self.rot ) # Start rotating the self.rot widget instead of the self widget