cocos2d-x动作

前端之家收集整理的这篇文章主要介绍了cocos2d-x动作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

By和To的区别

By算的是相对于节点对象的当前位置,To算的是绝对位置。

基本动作

移动

使用MoveTo和MoveBy完成节点对象在一个设置的时间后移动。

旋转

使用RotateTo和RotateBy完成节点对象在一个设置的时间后顺时旋转指定角度。

缩放

使用ScaleBy和ScaleTo完成节点对象的比例缩放。

淡入淡出

FadeIn修改节点对象的透明度属性,从完全透明到完全不透明。FadeOut相反。

色彩混合

auto mySprite = Sprite::create("mysprite.png");

// Tints a node to the specified RGB values
auto tintTo = TintTo::create(2.0f,120.0f,232.0f,254.0f);
mySprite->runAction(tintTo);

// Tints a node BY the delta of the specified RGB values.
auto tintBy = TintBy::create(2.0f,254.0f);
mySprite->runAction(tintBy);

帧动画

使用Animate对象可以很容易的通过每隔一个短暂时间进行图像替代的方式,实现一个翻页效果

auto mySprite = Sprite::create("mysprite.png");

// now lets animate the sprite we moved
Vector<SpriteFrame*> animFrames;
animFrames.reserve(12);
animFrames.pushBack(SpriteFrame::create("Blue_Front1.png",Rect(0,65,81)));
animFrames.pushBack(SpriteFrame::create("Blue_Front2.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Front3.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Left1.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Left2.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Left3.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Back1.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Back2.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Back3.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Right1.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Right2.png",81)));
animFrames.pushBack(SpriteFrame::create("Blue_Right3.png",81)));

// create the animation out of the frames
Animation* animation = Animation::createWithSpriteFrames(animFrames,0.1f);
Animate* animate = Animate::create(animation);

// run it and repeat it forever
mySprite->runAction(RepeatForever::create(animate));

变速运动

变速动作可以让节点对象具有加速度,产生平滑同时相对复杂的动作,可以用来模仿一些物理运动,这样比实际使用物理引擎的性能消耗低,使用起来也简单。下例是一个精灵从屏幕顶部落下然后不断跳动。

// create a sprite
auto mySprite = Sprite::create("mysprite.png");

// create a MoveBy Action to where we want the sprite to drop from.
auto move = MoveBy::create(2,Vec2(200,dirs->getVisibleSize().height -
 newSprite2->getContentSize().height));
auto move_back = move->reverse();

// create a BounceIn Ease Action
auto move_ease_in = EaseBounceIn::create(move->clone() );

// create a delay that is run in between sequence events
auto delay = DelayTime::create(0.25f);

// create the sequence of actions,in the order we want to run them
auto seq1 = Sequence::create(move_ease_in,delay,move_ease_in_back,delay->clone(),nullptr);

// run the sequence and repeat forever.
mySprite->runAction(RepeatForever::create(seq1));

序列

允许把一个方法添加进去CallFunc对象,然后将CallFunc添加到Sequence,这样在执行序列的时候就能触发方法调用

auto mySprite = Sprite::create("mysprite.png");

// create a few actions.
auto jump = JumpBy::create(0.5,Vec2(0,0),100,1);

auto rotate = RotateTo::create(2.0f,10);

// create a few callbacks
auto callbackJump = CallFunc::create([](){
    log("Jumped!");
});

auto callbackRotate = CallFunc::create([](){
    log("Rotated!");
});

// create a sequence with the actions and callbacks
auto seq = Sequence::create(jump,callbackJump,rotate,callbackRotate,nullptr);

// run it
mySprite->runAction(seq);

Spawn

和Sequence是非常相似的,区别是Spawn同时执行所有的动作,Spawn对象可以添加任意数量的动作和其它Spawn对象。

动作的克隆

MoveBy::create(10,Vec2(400,100));

你的heroSprite就在10s的时间中,从(0,0)移动到了(400,100),heroSprite有了一个新位置(400,100),更重要的是动作对象也有了节点位置相关的内部状态了。现在假如你有一个坐标位置相关的内部状态了。现在假如你有一个坐标位置 是(200,200)的emenySprite就会移动到(800,200)的坐标位置,并不是你期待的结果。因为第二次将这个动作应用的时候,它已经有内部状态了。使用clone()能避免这种情况,克隆获得一个新的动作对象。

// create our Sprites
auto heroSprite = Sprite::create("herosprite.png");
auto enemySprite = Sprite::create("enemysprite.png");

// create an Action
auto moveBy = MoveBy::create(10,100));

// run it on our hero
heroSprite->runAction(moveBy);

// run it on our enemy
enemySprite->runAction(moveBy); // oops,this will not be unique!
// uses the Actions current internal state as a starting point.
/ create our Sprites
auto heroSprite = Sprite::create("herosprite.png");
auto enemySprite = Sprite::create("enemysprite.png");

// create an Action
auto moveBy = MoveBy::create(10,100));

// run it on our hero
heroSprite->runAction(moveBy);

// run it on our enemy
enemySprite->runAction(moveBy->clone()); // correct! This will be unique

动作的倒转

倒转(Reverse)的功能也和字面意思一样,调用reverse()可以让一系列动作按相反的方向执行。

// reverse a sequence,spawn or action
mySprite->runAction(mySpawn->reverse());

猜你在找的Cocos2d-x相关文章