cocos2d-x实例学习(9)之CCCardinalSplineBy
2016-03-21 16:31
423 查看
CCCardinalSplineBy概念
这个类是样条曲线动作,其创建函数CCCardinalSplineBy::create(float duration, cocos2d::CCPointArray *points, float tension);中duration是时间间隔,points是控制点列表,tension是松紧程度。tension==1时,样条线是分段直线。tension<1向外松弛弯曲,tension>1向内缩紧弯曲。By动作是以当前坐标为新坐标原点。
CCCardinalSplineBy示例–为同一组控制点实现不同的移动路径
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCPointArray *array = CCPointArray::create(20);
array->addControlPoint(ccp(0, 0));
array->addControlPoint(ccp(s.width/2-30, 0));
array->addControlPoint(ccp(s.width/2-30, s.height-80));
array->addControlPoint(ccp(0, s.height-80));
array->addControlPoint(ccp(0, 0));
//
// sprite 1 (By)
//
// Spline with no tension (tension==0)
//
CCCardinalSplineBy *action = CCCardinalSplineBy::create(3, array, 0);
CCActionInterval *reverse = action->reverse();
CCFiniteTimeAction *seq = CCSequence::create(action, reverse, NULL);
m_tamara->setPosition(ccp(50, 50));
m_tamara->runAction(seq);
//
// sprite 2 (By)
//
// Spline with high tension (tension==1)
//
CCCardinalSplineBy *action2 = CCCardinalSplineBy::create(3, array, 1);
CCActionInterval *reverse2 = action2->reverse();
CCFiniteTimeAction *seq2 = CCSequence::create(action2, reverse2, NULL);
m_kathia->setPosition(ccp(s.width/2, 50));
m_kathia->runAction(seq2);
由于By动作是以当前坐标为新坐标原点,所以在draw函数里设置openGL的原点位置
// move to 50,50 since the "by" path will start at 50,50
kmGLPushMatrix();
kmGLTranslatef(50, 50, 0);
ccDrawCardinalSpline(m_pArray, 0, 100);
kmGLPopMatrix();
CCSize s = CCDirector::sharedDirector()->getWinSize();
kmGLPushMatrix();
kmGLTranslatef(s.width/2, 50, 0);
ccDrawCardinalSpline(m_pArray, 1, 100);
kmGLPopMatrix();
复制代码
效果图如下:
注:
CCPointArray解释
CCPointArray是一个包含控制点的数组,使用方法如上
这个类是样条曲线动作,其创建函数CCCardinalSplineBy::create(float duration, cocos2d::CCPointArray *points, float tension);中duration是时间间隔,points是控制点列表,tension是松紧程度。tension==1时,样条线是分段直线。tension<1向外松弛弯曲,tension>1向内缩紧弯曲。By动作是以当前坐标为新坐标原点。
CCCardinalSplineBy示例–为同一组控制点实现不同的移动路径
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCPointArray *array = CCPointArray::create(20);
array->addControlPoint(ccp(0, 0));
array->addControlPoint(ccp(s.width/2-30, 0));
array->addControlPoint(ccp(s.width/2-30, s.height-80));
array->addControlPoint(ccp(0, s.height-80));
array->addControlPoint(ccp(0, 0));
//
// sprite 1 (By)
//
// Spline with no tension (tension==0)
//
CCCardinalSplineBy *action = CCCardinalSplineBy::create(3, array, 0);
CCActionInterval *reverse = action->reverse();
CCFiniteTimeAction *seq = CCSequence::create(action, reverse, NULL);
m_tamara->setPosition(ccp(50, 50));
m_tamara->runAction(seq);
//
// sprite 2 (By)
//
// Spline with high tension (tension==1)
//
CCCardinalSplineBy *action2 = CCCardinalSplineBy::create(3, array, 1);
CCActionInterval *reverse2 = action2->reverse();
CCFiniteTimeAction *seq2 = CCSequence::create(action2, reverse2, NULL);
m_kathia->setPosition(ccp(s.width/2, 50));
m_kathia->runAction(seq2);
由于By动作是以当前坐标为新坐标原点,所以在draw函数里设置openGL的原点位置
// move to 50,50 since the "by" path will start at 50,50
kmGLPushMatrix();
kmGLTranslatef(50, 50, 0);
ccDrawCardinalSpline(m_pArray, 0, 100);
kmGLPopMatrix();
CCSize s = CCDirector::sharedDirector()->getWinSize();
kmGLPushMatrix();
kmGLTranslatef(s.width/2, 50, 0);
ccDrawCardinalSpline(m_pArray, 1, 100);
kmGLPopMatrix();
复制代码
效果图如下:
注:
CCPointArray解释
CCPointArray是一个包含控制点的数组,使用方法如上
相关文章推荐
- cocos2d-x项目Android版和IOS版接入微信分享功能示例
- Cocos2d-x引入中文支持库并移植到android平台
- mac上cocos2dx-lua环境搭建
- 【Cocos2d-x实例】 Flappy Bird游戏
- 【cocos2d-x 2】关于CocosStudio编辑出的csb的简单使用
- 搭建cocos-js开发环境
- cocos2dx 创建动画的几种方式
- cocos2d-x 大图创建帧动画
- 【cocos2dx 3.10】简述 cocos studio 的使用
- cocos2dx 2.x editbox
- 发一个基于Cocos2d-x的游戏
- [针对初学者]Cocos 瞎搞小技巧1
- Cocos2d-x 粒子系统之ParticleFire
- Cocos2d-x 3.1 HelloWorld解析
- cocos2dx2.x 与cocos2dx3.x创建线程不同方式总结
- cocos2dx-lua实现弹幕
- Cocos2dx游戏优化总结
- cocos2d 释放资源 总结
- Cocos2d-x 3.x开发中Visual Studio下libcurl库配置
- Cocos2dx 3.0 过渡篇(三十一)ValueVector和Vector不得不说的故事