一、CCAction
动作类:这个类是一个抽象类,他有四个直接的实现子类(CCFiniteTimeAction, CCFollow, CCRepeatForever, CCSpeed)。我们所有的动作都是这个四个子类的子类,我们在使用的时候也是直接使用的着四个类的子类对象执行相关的动作,下面我们来看一下一些常见的动作。
二、常用动作的使用
1、移动CCMoveBy;CCMoveTo
当我们的精灵执行CCMoveTo这个动作的时候会移动到指定的位置,而CCMoveBy则是沿着指定的方向移动一段距离(通过CGPoint.ccp(x,y)来指定)。
比如:下面的代码是将精灵做一个移动动作
CCSprite s = CCSprite.spriteWithSpriteFrameName("hero.png");
s.setAnchorPoint(0,0);//设置锚点
s.setPosition(300,150);//设置坐标
//创建一个移动动作①动作执行所需时间②x或y方向的位移
CCMoveBy move = CCMoveBy.actionWithDuration(1, ccp(100,80));
CCMoveBy moveBack = move.reverse();//reverse返回一个反方向的动作
CCSequence seq = CCSequence.actions(move, moveBack);//按顺序执行相应动作
CCRepeatForever rf = CCRepeatForever.action(seq);//永远重复执行该动作
s.runAction(rf);//运行动作
2、缩放CCScaleBy, 除了整体缩放外,还可以xy方向缩放不同的值放大缩小
float mapWidth= tiledMap.getContentSize().width;
CCScaleTo zoomin = CCScaleTo.actionWithDuration(1, 480/mapWidth);
CCDelayTime delay = CCDelayTime.actionWithDuration(0.3f);//该动作停留指定时间
CCScaleTo st = CCScaleTo.actionWithDuration(1, 1);
CCDelayTime delay2 = CCDelayTime.actionWithDuration(1);
CCInstantAction call = CCCallFunc.actionWithTarget(this, "mapScaleCallback");
tiledMap.runAction(CCSequence.actions(zoomin,delay,st,delay2,call));
3、旋转CCRotateBy,正反旋转
不断旋转精灵实现
//第一个参数为经历时间,第二个参数为要旋转的角度
CCRotateBy by = CCRotateBy.actionWithDuration(2, 360);
//设置该动作不断循环
CCRepeatForever seq = CCRepeatForever.action(by);
注意点:以锚点为中心点来旋转。如要以中心点旋转,则应设置锚点(0.5,0.5),如果锚点为(0,0),则以左下点为中心点旋转
4、曲线运动
CCBezierConfig bezier = new CCBezierConfig();
bezier.controlPoint_1 = ccp(10, 10); 起点
bezier.controlPoint_2 = ccp(50, 100); 控制点,制高点
bezier.endPosition = ccp(100, 20); 结束位置
CCBezierBy b = CCBezierBy.action(2, bezier);
5.其他动作
显示和隐藏CCHide CCShow
弹跳:CCJumpBy CCJumpTo。三个参数的含义a)时间b)目标点c)回落高度d)跳动次数
闪烁:CCBlink
播放序列帧:CCAnimation;CCAnimate
注意:如果不重复执行,只执行一次就报空指针,个人感觉引擎待优化的地方。
如果要停止播放,可以采用stopAction
三、动画的执行顺序
1.CCSequence:按顺序执行动画
CCSequence ccSequence = CCSequence.actions(move,moveto);//第二个参数是可变参数
CCCallFunc:执行指定函数的动作,回调动作
CCCallFuncN func = CCCallFuncN.action(this, "onActionFinished");//会在动作执行完后调用onActionFinished方法
public void onActionFinished(Object sender){
System.out.println("onActionFinished");
}
3.CCDelayTime:逗留指定时间的动作
4.CCSpawn:同时执行要被执行的动作
热点新闻