Cocos2d3.0学习笔记-Action复杂动作

来源:互联网 发布:字体识别软件app 编辑:程序博客网 时间:2024/06/05 06:52

今天我们来学习一下,较为复杂的动作。
内容主要有

  • 贝塞尔曲线运动
  • 重复动作
  • 组合动作

贝塞尔曲线运动 - BezierTo BezierBy

不了解贝塞尔曲线的,可以百度一下相关知识,这里只做实现就不解释了。
一共有两种,BezierTo和 BezierBy

  • BezierTo 是向目标位置进行移动,与精灵当前位置无关
  • BezierBy 是在当前精灵的位置基准下进行移动的

BezierTo实现

//---------------------------BezierTo 贝塞尔曲线运动-------------------------------------    //获得屏幕尺寸    Size visiableSize = Director::getInstance()->getVisibleSize();    //添加一个精灵,这里测试时,可以尝试改变panda_spr1的 y值,就可以发现BezierTo的特性了    Sprite* panda_spr1 = Sprite::create("panda2.png");    panda_spr1->setPosition(ccp(0, 400));    this->addChild(panda_spr1);    //创建贝塞尔曲线的配置    ccBezierConfig bezier;    bezier.controlPoint_1 = Point(100, 0);   //波谷偏向值    bezier.controlPoint_2 = Point(200, 250);     //波峰偏向值    bezier.endPosition = Point(300, 0); //动作终点    //创建 BezierTo 动作对象, BezierTo 是向目标位置进行移动,与精灵当前位置无关    BezierTo* bezierToAct = BezierTo::create(4.0f, bezier);    //执行动作    panda_spr1->runAction(bezierToAct);

BezierBy 实现

    //---------------------------BezierBy 贝塞尔曲线运动-------------------------------------    //获得屏幕尺寸    Size visiableSize = Director::getInstance()->getVisibleSize();    //添加一个精灵    Sprite* panda_spr1 = Sprite::create("panda2.png");    panda_spr1->setPosition(ccp(50, 180));    this->addChild(panda_spr1);    //创建贝塞尔曲线的配置    ccBezierConfig bezier;    bezier.controlPoint_1 = Point(100, 0);   //波谷偏向值    bezier.controlPoint_2 = Point(200, 250);     //波峰偏向值    bezier.endPosition = Point(300, 0); //动作终点    //创建 BezierBy 动作对象,BezierBy 是在当前精灵的位置基准下进行移动的    BezierBy* bezierByAct = BezierBy::create(4.0f, bezier);    //执行动作    panda_spr1->runAction(bezierByAct);

重复运动-RepeatForever

先实现一个弹跳 jumpBy 效果,跳两秒,向上1/3width向右1/3height,跳跃高度200,一共跳两次

    //获取屏幕大小    Size visiableSize = Director::getInstance()->getVisibleSize();    //新建一个精灵    Sprite* panda_spr = Sprite::create("panda2.png");    panda_spr->setPosition(ccp(0, 0));    this->addChild(panda_spr);    //创建一个 弹跳 对象,参数分别是,跳两秒,向上1/3width向右1/3height,跳跃高度200,一共跳两次    JumpBy* jpByAct = JumpBy::create(2.0f, ccp(visiableSize.width / 3, visiableSize.height / 3), 200, 2);    //runAction 启动动作    panda_spr->runAction(jpByAct);

我们让他重复执行跳跃操作,只需要一句话

-RepeatForever* repForAct = RepeatForever::create(jpByAct);
然后将启动动作,改成重复动作repForAct,他就一直做动作,不停喽。

    //获取屏幕大小    Size visiableSize = Director::getInstance()->getVisibleSize();    //新建一个精灵    Sprite* panda_spr = Sprite::create("panda2.png");    panda_spr->setPosition(ccp(0, 0));    this->addChild(panda_spr);    //创建一个 弹跳 对象,参数分别是,跳两秒,向上1/3width向右1/3height,跳跃高度200,一共跳两次    JumpBy* jpByAct = JumpBy::create(2.0f, ccp(visiableSize.width / 3, visiableSize.height / 3), 200, 2);    RepeatForever* repForAct = RepeatForever::create(jpByAct);    //runAction 启动动作    panda_spr->runAction(repForAct);

组合动作-Sequence 和 Spawn

  • Sequence 就是所有 动作 按顺序 一个一个 做
  • Spawn 就是所有 动作 一起 做
  • 最终动作结束点,两者是一样的,只是过程不一样。可以自己试一下,体验一下,还是很好玩的。
    //获取屏幕大小    Size visiableSize = Director::getInstance()->getVisibleSize();    //新建一个精灵    Sprite* panda_spr = Sprite::create("panda2.png");    panda_spr->setPosition(ccp(0, 0));    this->addChild(panda_spr);    //创建一个 弹跳 对象,参数分别是,跳两秒,向上1/3width向右1/3height,跳跃高度200,一共跳两次    JumpBy* jpByAct = JumpBy::create(2.0f, ccp(visiableSize.width / 3, visiableSize.height / 3), 200, 2);    //创建一个 移动 对象    MoveBy* moveByAct = MoveBy::create(4.0f, ccp(visiableSize.width / 3, visiableSize.height / 3));    //创建一个 旋转 对象,转转转,哈哈    RotateBy* rotaByAct = RotateBy::create(6.0f, 3600, 3600);    //------------------------Spawn所有动作一起运动----------------------------    Action* action = Spawn::create(jpByAct, moveByAct, rotaByAct, NULL);    //------------------------Sequence所有动作按顺序运动----------------------------    //Action* action = Sequence::create(jpByAct, moveByAct, rotaByAct, NULL);    //runAction 启动动作    panda_spr->runAction(action);

成功了没,是不是很好玩?嘿嘿。这种组合动作明显有趣多了。

1 0
原创粉丝点击