Description
本章对应英文文档:Actions, Transformations and Effects
动作
"动作"即对CocosNode对象下达命令.这些动作常见的有调整对象的属性,旋转,比例等.
比如"MoveBy"动作用来命令某对象在指定时间内进行移动.
示范代码:
import cocos
from cocos.actions import MoveBy
class Fly(cocos.layer.Layer):
def __init__(self):
super(Fly,self).__init__()
rocket = cocos.sprite.Sprite('rocket.png')
rocket.position = 128,128
rocket.scale = 0.5
#在5秒内往右上方移动,最终横竖坐标分别增加50
rocket.do( MoveBy( (320,240), duration=2) )
self.add(sprite, z=0)
cocos.director.director.init()
scene = cocos.scene.Scene(Fly())
cocos.director.director.run(scene)
火箭往右上方移动.
动作根据所花费的时间不同可分为三类:
- 瞬间动作: 顾名思义,瞬间完成的动作,比如瞬移:
#把精灵瞬移到坐标(120, 330)
sprite.do( Place( (120, 330) ))
- 持续动作: 在一定时间内完成的动作,比如MoveBy
- 时长未知的动作: 完成时间未知的动作
已知时长的持续型动作有些有趣的特性:
-
执行一些修改时间的动作可以调节时间流速
-
所有使用相对坐标的动作(以"By"结尾)和一些使用绝对坐标的动作(以"To"结尾)可以叠加"Reverse"(相反)效果以实现反方向的动作,比如顺时针旋转变成逆时针.
(作者ps:第一章有示范代码)
## 基础动作 基础动作会修改精灵的一些基础属性,比如:
-
坐标
-
比例
-
旋转
-
是否可见
-
淡入淡出
特殊动作
**时间相关:**在一段时间内待命
**流程控制:**调用一个指定的函数
**网格助手:**帮忙执行一些网格动作
摄影机相关:
动作的组合与修饰
Cocos也提供了一些强大的操作符用来组合和修饰动作,重点便是下面所列出的.
顺序执行操作符: action_1 + action_2 -> action_result
action_result的效果就是在action_1完成后执行action_2
例子:
import cocos
from cocos.actions import MoveTo
class Fly(cocos.layer.Layer):
def __init__(self):
super(Fly,self).__init__()
rocket = cocos.sprite.Sprite('rocket.png')
rocket.position = 128,128
rocket.scale = 0.5
move = MoveTo((100, 100), 2) + MoveTo((200, 200), 3)
rocket.do( move )
self.add(sprite, z=0)
cocos.director.director.init()
scene = cocos.scene.Scene(Fly())
cocos.director.director.run(scene)
火箭花2秒时间到达(100,100)坐标,再花3秒时间到达(200,200)坐标.
同时执行操作符: action_1 | action_2 -> action_result
即action_1和action_2同时发生.
例子:
import cocos
from cocos.actions import MoveTo, RotateBy
class Fly(cocos.layer.Layer):
def __init__(self):
super(Fly,self).__init__()
rocket = cocos.sprite.Sprite('rocket.png')
rocket.position = 128,128
rocket.scale = 0.5
move = MoveTo((400, 400), 5) | RotateBy(360, 5)
rocket.do( move )
self.add(sprite, z=0)
cocos.director.director.init()
scene = cocos.scene.Scene(Fly())
cocos.director.director.run(scene)
火箭往右上方翻滚.
**循环操作符:**action_1 * n -> action_result
action_1将执行n次(n是一个合法的大于等于0的整数)
例子:
将上面代码中move=那行替换为
move = RotateBy(360, 5) * 2
效果就是火箭顺时针旋转2次.
无限重复: Repeat(action_1) -> action_result
无限重复动作
例子:
import cocos
from cocos.actions import RotateBy,Repeat
class Fly(cocos.layer.Layer):
def __init__(self):
super(Fly,self).__init__()
rocket = cocos.sprite.Sprite('rocket.png')
rocket.position = 128,128
rocket.scale = 0.5
move = Repeat( RotateBy(360, 5) )
rocket.do( move )
self.add(sprite, z=0)
cocos.director.director.init()
scene = cocos.scene.Scene(Fly())
cocos.director.director.run(scene)
火箭不停地旋转.
时间流速修改器
网格辐度修改器
特效
(待续)
创建自定义动作
(待续)
Activity