今天我们来学习一下,较为复杂的动作。
内容主要有
不了解贝塞尔曲线的,可以百度一下相关知识,这里只做实现就不解释了。
一共有两种,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);
先实现一个弹跳 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);
//获取屏幕大小
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);
成功了没,是不是很好玩?嘿嘿。这种组合动作明显有趣多了。