一、解析
1)包含4个动作
1.CCFiniteTimeAction 和时间相关的动作
2.CCFlow 让图层跟随精灵移动
3.CCReapeatForever 循环
4.CCSpeed 和速度相关的动作
//————————-
2)CCFlow 让图层跟随精灵移动
3)CCFiniteTimeAction 分
a.CCInstantAction 瞬时动作 闪现
b.CCIntervalAction 延时动作 奔跑
二、jumpBy , moveTo , moveBy
1) moveBy 有 reverse() 而moveTo没有
2) jumpBy height指的是跳跃时抛物线最高点离物体的距离
CCJumpBy.action(time,pos ,height, jumps);
三、复杂动作
1)ccSpawn //两个动作并行运动
2) CCSequeue //两个动作串联运动
3) CCRepeatForever //无限循环运动
四、代码实现
public class ActionLayer extends CCLayer {
private CCSprite mManSprite;
public ActionLayer() {
setIsTouchEnabled(true);
init();
}
private void init() {
createSprite("bbg_arena.jpg");
moveTo();
moveBy();
jumpBy();
scaleBy();
rotateTo();
rotateBy();
bezierBy();// 曲线
fadeIn();
ease();// 加速度
colorChange();
blink();//闪烁
multiAction();//综合动作
}
private void multiAction() {
CCSprite sprite = createSprite("z_1_attack_01.png");
// 设置在锚点上100处
sprite.setPosition(50, 50);
sprite.setAnchorPoint(0.5f, 0.5f);
CCJumpBy jump = CCJumpBy.action(2, CCNode.ccp(200, 0), 50, 1);
CCRotateBy rotateBy = CCRotateBy.action(2, 360);
CCSpawn ccSpawn = CCSpawn.actions(jump, rotateBy);//并行动作
// 反向
CCJumpBy reverse = jump.reverse();
// 连接动作
CCSequence sequence = CCSequence.actions(ccSpawn, reverse);
// 运行动作
sprite.runAction(sequence);
}
private void blink() {
CCBlink blink = CCBlink.action(3, 3);
createSprite("msn.png").runAction(blink);
}
private void colorChange() {
// 字体精灵
CCLabel label = CCLabel.labelWithString("颜色变化了", null, 20);
label.setPosition(600, 200);
label.setColor(ccc3(50, 250, 156));
this.addChild(label);
// 变化后的颜色
ccColor3B c = ccc3(100, 255, 122);
// 1代表时间
CCTintBy tin = CCTintBy.action(1, c);
CCTintBy reverse = tin.reverse();
// 连接动作
CCSequence sequence = CCSequence.actions(tin, reverse);
// 无限循环
CCRepeatForever forever = CCRepeatForever.action(sequence);
label.runAction(forever);
}
private void ease() {
CCSprite sprite = createSprite("msn.png");
sprite.setPosition(500, 150);
CCIntervalAction move = CCMoveTo.action(2, CCNode.ccp(200, 0));
CCEaseOut out = CCEaseOut.action(move, 5f);
sprite.runAction(out);
}
private void fadeIn() {
CCSprite sprite = createSprite("msn.png");
// 设置在锚点上100处
sprite.setPosition(400, 250);
CCFadeIn in = CCFadeIn.action(10);
// 运行动作
sprite.runAction(in);
}
private void bezierBy() {
CCSprite sprite = createSprite("msn.png");
// 设置在锚点上100处
sprite.setPosition(200, 150);
// 设置抛物线的点
CCBezierConfig c = new CCBezierConfig();
c.controlPoint_1 = ccp(0, 0);
c.controlPoint_2 = ccp(100, 100);
c.endPosition = ccp(200, 0);
CCBezierBy rotate = CCBezierBy.action(2, c);
// 反向
CCBezierBy reverse = rotate.reverse();
// 连接动作
CCSequence sequence = CCSequence.actions(rotate, reverse);
// 无限循环
CCRepeatForever forever = CCRepeatForever.action(sequence);
// 运行动作
sprite.runAction(forever);
}
// 偷懒做法
private void rotateTo() {
CCSprite sprite = createSprite("msn.png");
// 设置在锚点上100处
sprite.setPosition(300, 350);
CCRotateTo rotate = CCRotateTo.action(2, 160);
// 反向
// CCIntervalAction reverse = rotate.reverse();
// 连接动作
// CCSequence sequence = CCSequence.actions(rotate, reverse);
// 无限循环
CCRepeatForever forever = CCRepeatForever.action(rotate);
// 运行动作
sprite.runAction(forever);
}
private void rotateBy() {
CCSprite sprite = createSprite("msn.png");
// 设置在锚点上100处
sprite.setPosition(200, 150);
CCRotateBy rotate = CCRotateBy.action(2, 360);
// 反向
CCRotateBy reverse = rotate.reverse();
// 连接动作
CCSequence sequence = CCSequence.actions(rotate, reverse);
// 无限循环
CCRepeatForever forever = CCRepeatForever.action(sequence);
// 运行动作
sprite.runAction(forever);
}
private void scaleBy() {
CCSprite sprite = createSprite("heart.png");
// 设置在锚点上100处
sprite.setPosition(100, 100);
// 基于锚点的缩放
CCScaleBy scale = CCScaleBy.action(2, 0.5f);
// 反向
CCScaleBy reverse = scale.reverse();
// 连接动作
CCSequence sequence = CCSequence.actions(scale, reverse);
// 无限循环
CCRepeatForever forever = CCRepeatForever.action(sequence);
// 运行动作
sprite.runAction(forever);
}
public void moveTo() {
mManSprite = createSprite("z_1_attack_01.png");
CCAction move = CCMoveTo.action(2, CCNode.ccp(200, 0));
mManSprite.runAction(move);
}
public void jumpBy() {
CCSprite sprite = createSprite("z_1_attack_01.png");
// 设置在锚点上100处
sprite.setPosition(0, 200);
CCJumpBy jump = CCJumpBy.action(2, CCNode.ccp(200, 0), 50, 1);
// 反向
CCJumpBy reverse = jump.reverse();
// 连接动作
CCSequence sequence = CCSequence.actions(jump, reverse);
// 运行动作
sprite.runAction(sequence);
}
public void moveBy() {
CCSprite sprite = createSprite("z_1_attack_01.png");
// 设置在锚点上100处
sprite.setPosition(0, 100);
CCMoveBy move = CCMoveBy.action(2, CCNode.ccp(200, 0));
// 反向
CCMoveBy reverse = move.reverse();
// 连接动作
CCSequence sequence = CCSequence.actions(move, reverse);
// 无限循环
CCRepeatForever forever = CCRepeatForever.action(sequence);
// 运行动作
sprite.runAction(forever);
}
private CCSprite createSprite(String path) {
CCSprite sprite = CCSprite.sprite(path);
sprite.setAnchorPoint(0, 0);
this.addChild(sprite);
return sprite;
}
}