cocos2dx3.0下载 3.0 过渡篇灰机还是3D好

cocos(255)
&iframe id=&cproIframe_u1834336& width=&468& height=&15& src=&/acom?adn=0&at=231&aurl=&cad=1&ccd=24&cec=UTF-8&cfv=16&ch=0&col=zh-CN&conOP=0&cpa=1&dai=2&dis=0&ltr=http%3A%2F%%2Fs%3Fwd%3Dcocos2dx3.0%2B%25E8%25A7%25A6%25E6%%26rsv_spt%3D1%26issp%3D1%26f%3D3%26rsv_bp%3D0%26rsv_idx%3D2%26ie%3Dutf-8%26tn%3Dbaiduhome_pg%26rsv_enter%3D1%26inputT%3D7872%26oq%3Dbase%2Bclass%2Bha&ltu=http%3A%%2Fpanjing%2Farticle%2Fdetails%2F2370.html&lunum=6&n=_cpr&pcs=&pis=&ps=308x427&psr=&pss=&qn=cb9ea12776cfd0f2&rad=&rsi0=468&rsi1=15&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%230000ff&rss3=&rss4=&rss5=&rss6=%23e10900&rss7=&scale=&skin=&td_id=1834336&tn=tlink_default_468_15&tpr=9&ts=1&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u1834336& align=&center,center& marginwidth=&0& marginheight=&0& scrolling=&no& frameborder=&0& allowtransparency=&true& style=&box-sizing: border- margin: 0 padding: 0 list-style: max-width: 100%;&&&/iframe&
尊重原创,转载请注明来自:star特530的CSDN博客&
本来在中午休息时间打算大展拳脚,好好写一篇新触摸机制相关的博文,结果,等真正下手的时候才发现无从下手,很多地方自己都说不清,赶紧看了下,才发现原来是这样,还可以这样,哦?这样都行?哎,我还是太年轻了。
咱也只能挑简单的讲了。
假设要实现拖动一个精灵移动,那我们的步骤是:
1、&创建一个精灵;
2、一个触摸事件&listener&,设置listener的onTouchBegan,onTouchMoved,onTouchE
3、将和&关联起来。
实现如下:
1、&创建精灵:
origin = Director::getInstance()-&getVisibleOrigin();
size = Director::getInstance()-&getVisibleSize();
sprite = Sprite::create(&Images/CyanSquare.png&);
sprite-&setPosition(origin+Point(size.width/2,
size.height/2) + Point(-80, 80));
addChild(sprite,
listener1 = EventListenerTouchOneByOne::create();
listener1-&setSwallowTouches(true);
listener1-&onTouchBegan
= [](Touch* touch, Event* event){
target =&static_cast&Sprite*&(event-&getCurrentTarget());
locationInNode = target-&convertToNodeSpace(touch-&getLocation());
s = target-&getContentSize();
rect = Rect(0, 0, s.width, s.height);
if&(rect.containsPoint(locationInNode))
&&&&&&return&true;
&&&&&&return&false;
listener1-&onTouchMoved
= [](Touch* touch, Event* event){
target =&static_cast&Sprite*&(event-&getCurrentTarget());
&&&&target-&setPosition(target-&getPosition()
+ touch-&getDelta());
listener1-&onTouchEnded
= [=](Touch* touch, Event* event){
_eventDispatcher-&addEventListenerWithSceneGraphPriority(listener1
,sprite);
以上就是移动一个精灵的实现过程,这里特意交代一些细节:
1)触摸监听的创建方式有两种,一种是:EventListenerTouchOneByOne,另一种是:EventListenerTouchAllAtOnce,顾名思义,EventListenerTouchOneByOne的意思单点触摸,EventListenerTouchAllAtOnce,是多点触摸,而不需要再用设置Delegate的方式来做了。3.0触摸机制还有个不同的地方,只要是放在最上面的那个精灵,那它的触摸优先级就最高。我们用的按钮就是用这种方式设置触摸优先级的。而
2)将listener1添加到事件调度中,这里用的是:
_eventDispatcher-&addEventListenerWithSceneGraphPriority(listener1
我们进入addEventListenerWithSceneGraphPriority的定义中看一下,有下面这一行代码:
listener-&setFixedPriority(0);
它将精灵的触摸优先级设置成0,从这里我们可以引申出两个问题,一个就是当我们要给精灵设置触摸优先级时,
listener-&setFixedPriority(0);
,因为0已经被“官府”征用了,另一个问题就是:如果自己想设置精灵的触摸优先级,那应该怎么做呢?下面是提供的另外一种添加listener的方法:
_eventDispatcher-&addEventListenerWithFixedPriority(listener1
,fixedPriority);
在第二个参数里设置触摸优先级,这样就可以了。
3)如果你有多个精灵,且这些精灵都想实现拖动的功能,那么这些精灵都可以使用这一个触摸监听,例如我们有三个精灵,sprite,sprite2,sprite3,他们调用listener1的方式:
_eventDispatcher-&addEventListenerWithSceneGraphPriority(listener1,
&_eventDispatcher-&addEventListenerWithSceneGraphPriority(listener1-&clone(),
_eventDispatcher-&addEventListenerWithSceneGraphPriority(listener1-&clone(),
其中sprite2和sprite3都是克隆了listener1的,进入clone()的定义,我们看到以下代码:
EventListenerTouchOneByOne*
EventListenerTouchOneByOne::clone()
ret =&new&EventListenerTouchOneByOne();
&&&&if&(ret
&& ret-&init())
&&&&&&&&ret-&autorelease();
&&&&&&&&ret-&onTouchBegan
= onTouchB
&&&&&&&&ret-&onTouchMoved
= onTouchM
&&&&&&&&ret-&onTouchEnded
= onTouchE
&&&&&&&&ret-&onTouchCancelled
= onTouchC
&&&&&&&&ret-&_claimedTouches
= _claimedT
&&&&&&&&ret-&_needSwallow
&&&&&&&&CC_SAFE_DELETE(ret);
&&&&return&
以上代码主要的目的也就是实现克隆touchbegan,touchmoved,touchended。
3、删除触摸监听
如果想移除的触摸移动,可以这么做:
_eventDispatcher-&removeEventListeners(EventListener::Type::TOUCH_ONE_BY_ONE);
这样就OK了。
好了,先说到这里吧。今晚公司尾牙请客,喝了蛮多酒的,所以这篇博文写的可能不够周密,望大家见谅。
3.0新的地方讲的也差不多了,简单的就不多说了,难的我也不懂。所以呢,就这样吧。接下来应该是写一些关于的例子吧。恩。
有人问:3.0bate版本 的 继承layer的LayerColor,想停止LayerColor的触摸调用而使用setTouchEnabled,编译器提示声明被否决,肿么办?有神马替代函数能够停止触摸
&答:将setTouchEnable(),换成setEnable();试试
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1000311次
积分:13552
积分:13552
排名:第636名
原创:80篇
转载:1793篇
评论:69条
(27)(7)(54)(12)(48)(18)(13)(6)(4)(64)(2)(1)(3)(28)(56)(51)(59)(16)(44)(12)(4)(84)(70)(60)(84)(63)(14)(10)(68)(73)(84)(10)(9)(44)(91)(41)(116)(153)(180)(101)(3)专注于iOS[cocos2d-x]、php、c/c++、ruby、java等技术领域
每日一曲【程序猿做久了,你是否忽略了身边的人?】
1、以CC开头的类从此去掉CC,如:
| CCSprite
| Sprite |
| CCDirector
| Director |
| etc… |
举个例子,创建一个精灵的方式:
CCSprite* sp = CCSprite::create();
auto sp = Sprite::create();
2、clone() 替代 copy(), 这个我用的不多,所以也就不多交代了;
3、Director的单例换成getInstance();
| CCDirector-&sharedDirector() | Director-&getInstance() |
| etc… |
4、新的触摸机制,先贴一段代码给大家看看,可能是下一篇或者下下篇我会详细讲下新的触摸机制的。
auto sprite = Sprite::create("file.png");
auto listener = EventListenerTouchOneByOne::create();
listener-&setSwallowTouch(true);
listener-&onTouchBegan = [](Touch* touch, Event* event) { do_some_thing(); };
listener-&onTouchMoved = [](Touch* touch, Event* event) { do_some_thing(); };
listener-&onTouchEnded = [](Touch* touch, Event* event) { do_some_thing(); };
listener-&onTouchCancelled = [](Touch* touch, Event* event) { do_some_thing(); };
// The priority of the touch listener is based on the draw order of sprite
EventDispatcher::getInstance()-&addEventListenerWithSceneGraphPriority(listener, sprite);
// Or the priority of the touch listener is a fixed value
EventDispatcher::getInstance()-&addEventListenerWithFixedPriority(listener, 100); // 100 is a fixed value
5、还有一些杂七杂八的东西,本人理解的不透,也就不发出来献丑了,最后将CCType.h 里的一些变动贴出来,让我们愉快的结束这篇博文。
| v2.1 struct names | v3.0 struct names |
| ccColor3B | Color3B |
| ccColor4B | Color4B |
| ccColor4F | Color4F |
| ccVertex2F | Vertex2F |
| ccVertex3F | Vertex3F |
| ccTex2F | Tex2F |
| ccPointSprite | PointSprite |
| ccQuad2 | Quad2 |
| ccQuad3 | Quad3 |
| ccV2F_C4B_T2F | V2F_C4B_T2F |
| ccV2F_C4F_T2F | V2F_C4F_T2F |
| ccV3F_C4B_T2F | V3F_C4B_T2F |
| ccV2F_C4B_T2F_Triangle | V2F_C4B_T2F_Triangle |
| ccV2F_C4B_T2F_Quad | V2F_C4B_T2F_Quad |
| ccV3F_C4B_T2F_Quad | V3F_C4B_T2F_Quad |
| ccV2F_C4F_T2F_Quad | V2F_C4F_T2F_Quad |
| ccBlendFunc | BlendFunc |
| ccT2F_Quad | T2F_Quad |
| ccAnimationFrameData | AnimationFrameData |
一些全局的定义:
ccColor3B color3B = ccc3(0, 0, 0);
ccc3BEqual(color3B, ccc3(1, 1, 1));
ccColor4B color4B = ccc4(0, 0, 0, 0);
ccColor4F color4F = ccc4f(0, 0, 0, 0);
color4F = ccc4FFromccc3B(color3B);
color4F = ccc4FFromccc4B(color4B);
ccc4FEqual(color4F, ccc4F(1, 1, 1, 1));
color4B = ccc4BFromccc4F(color4F);
color3B = ccWHITE;
// in v3.0
Color3B color3B = Color3B(0, 0, 0);
color3B.equals(Color3B(1, 1, 1));
Color4B color4B = Color4B(0, 0, 0, 0);
Color4F color4F = Color4F(0, 0, 0, 0);
color4F = Color4F(color3B);
color4F = Color4F(color4B);
color4F.equals(Color4F(1, 1, 1, 1));
color4B = Color4B(color4F);
color3B = Color3B::WHITE;
继续…
| v2.1 names | v3.0 names |
| ccp | Point |
| ccpNeg | Point::- |
| ccpAdd | Point::+ |
| ccpSub | Point::- |
| ccpMult | Point::* |
| ccpMidpoint | Point::getMidpoint |
| ccpDot | Point::dot |
| ccpCrosss | Point::cross |
| ccpPerp | Point::getPerp |
| ccpRPerp | Point::getRPerp |
| ccpProject | Point::project |
| ccpRotate | Point::rotate |
| ccpUnrotate | Point::unrotate |
| ccpLengthSQ | Point::getLengthSq() |
| ccpDistanceSQ | Point::getDistanceSq |
| ccpLength | Point::getLength |
| ccpDistance | Point::getDistance |
| ccpNormalize | Point::normalize |
| ccpForAngle | Point::forAngle |
| ccpToAngle | Point::getAngle |
| ccpClamp | Point::getClampPoint |
| ccpFromSize | Point::Point |
| ccpCompOp | Point::compOp |
| ccpLerp | Point::lerp |
| ccpFuzzyEqual | Point::fuzzyEqual |
| ccpCompMult | Point::Point |
| ccpAngleSigned | Point::getAngle |
| ccpAngle | Point::getAngle |
| ccpRotateByAngle | Point::rotateByAngle |
| ccpLineInersect | Point::isLineIntersect |
| ccpSegmentIntersect | Point::isSegmentIntersect |
| ccpIntersectPoint | Point::getIntersectPoint |
| CCPointMake | Point::Point |
| CCSizeMake | Size::Size |
| CCRectMake | Rect::Rect |
| PointZero | Point::ZERO |
| SizeZero | Size::ZERO |
| RectZero | Rect::ZERO |
| TiledGrid3DAction::tile | TiledGrid3DAction::getTile |
| TiledGrid3DAction::originalTile | TiledGrid3DAction::getOriginalTile |
| TiledGrid3D::tile | TiledGrid3D::getTile |
| TiledGrid3D::originalTile | TiledGrid3D::getOriginalTile |
| Grid3DAction::vertex | Grid3DAction::getVertex |
| Grid3DAction::originalVertex | Grid3DAction::getOriginalVertex |
| Grid3D::vertex | Grid3D::getVertex |
| Grid3D::originalVertex | Grid3D::getOriginalVertex |
| Configuration::sharedConfiguration | Configuration::getInstance |
| Configuration::purgeConfiguration | Configuration::destroyInstance() |
| Director::sharedDirector() | Director::getInstance() |
| FileUtils::sharedFileUtils | FileUtils::getInstance |
| FileUtils::purgeFileUtils | FileUtils::destroyInstance |
| EGLView::sharedOpenGLView | EGLView::getInstance |
| ShaderCache::sharedShaderCache | ShaderCache::getInstance |
| ShaderCache::purgeSharedShaderCache | ShaderCache::destroyInstance |
| AnimationCache::sharedAnimationCache | AnimationCache::getInstance |
| AnimationCache::purgeSharedAnimationCache | AnimationCache::destroyInstance |
| SpriteFrameCache::sharedSpriteFrameCache | SpriteFrameCache::getInstance |
| SpriteFrameCache:: purgeSharedSpriteFrameCache | SpriteFrameCache::destroyInstance |
| NotificationCenter::sharedNotificationCenter | NotificationCenter::getInstance |
| NotificationCenter:: purgeNotificationCenter | NotificationCenter::destroyInstance |
| Profiler::sharedProfiler | Profiler::getInstance |
| UserDefault::sharedUserDefault | UserDefault::getInstance |
| UserDefault::purgeSharedUserDefault | UserDefault::destroyInstance |
| Application::sharedApplication | Application::getInstance |
| ccc3() | Color3B() |
| ccc3BEqual() | Color3B::equals() |
| ccc4() | Color4B() |
| ccc4FFromccc3B() | Color4F() |
| ccc4f() | Color4F() |
| ccc4FFromccc4B() | Color4F() |
| ccc4BFromccc4F() | Color4B() |
| ccc4FEqual() | Color4F::equals() |
| ccWHITE | Color3B::WHITE |
| ccYELLOW | Color3B::YELLOW |
| ccBLUE | Color3B::BLUE |
| ccGREEN | Color3B::GREEN |
| ccRED | Color3B::RED |
| ccMAGENTA | Color3B::MAGENTA |
| ccBLACK | Color3B::BLACK |
| ccORANGE | Color3B::ORANGE |
| ccGRAY | Color3B::GRAY |
| kBlendFuncDisable | BlendFunc::BLEND_FUNC_DISABLE |
- 39,418 views - 23,674 views - 16,439 views - 13,468 views - 12,845 views - 12,149 views - 11,965 views - 10,619 views - 10,357 views - 9,926 views
博文目录(选你所爱)
选择分类目录
Linux专区&&(65)
&&&centos6.2&&(55)
&&&shell&&(8)
&&&ubuntu&&(9)
&&&yum&&(1)
Mac专区&&(28)
&&&Mac OS X 10.7.4&&(24)
&&&Mac移动应用(游戏)&&(5)
Web方向&&(77)
&&&git&&(1)
&&&jquery&&(11)
&&&nginx&&(8)
&&&software&&(6)
&&&svn&&(7)
&&&web前端&&(3)
&&&web服务器&&(4)
&&&windows&&(8)
&&&服务器&&(3)
&&&网站建设&&(13)
&&&网络与安全&&(3)
&&&资讯&&(1)
&&&运营&&(10)
&&&&&&渠道推广&&(4)
&&&&&&移动资讯&&(7)
感悟&&(52)
&&&励志篇&&(1)
&&&怀念&&(1)
&&&感悟提升&&(12)
&&&杂文&&(18)
&&&生活点滴&&(22)
数据库&&(14)
&&&mysql&&(14)
移动开发&&(214)
&&&android&&(3)
&&&cocos2d&&(3)
&&&cocos2d-x(1.x)&&(47)
&&&cocos2d-x(2.x)&&(116)
&&&cocos2d-x(3.x)&&(40)
&&&cocos2d-xFD库&&(7)
&&&cocostudio&&(1)
&&&iOS应用&&(1)
&&&OpenGL-ES&&(2)
&&&移动探索&&(1)
&&&移动资讯&&(3)
编程语言&&(247)
&&&c/c++&&(51)
&&&html&&(6)
&&&java&&(46)
&&&&&&dubbo&&(1)
&&&&&&Java框架&&(30)
&&&&&&&&&Logger&&(5)
&&&&&&&&&Mybatis&&(5)
&&&&&&&&&Spring&&(18)
&&&&&&&&&Struts&&(3)
&&&objective-c&&(1)
&&&php&&(46)
&&&Ruby on Rails&&(70)
&&&&&&rails&&(32)
&&&&&&rails优化&&(5)
&&&&&&rails测试&&(11)
&&&&&&rails路由&&(2)
&&&&&&rails部署&&(11)
&&&&&&ruby&&(14)
&&&Tools&&(2)
&&&汇编&&(1)
&&&算法&&(1)
&&&编程先知&&(2)
&&&脚本语言&&(8)
&&&&&&Json&&(7)
&&&视频教程&&(1)
&&&设计模式&&(18)
项目管理&&(2)
&&&项目文档&&(1)
最近访客C++
文章:644 篇
链接:34 个
评论:344 条
浏览:1,429,633 次
运行:1544天
开拓视野【赞助区】
Software MyZone为个人网站,本站内容仅供学习交流,将不对任何资源负法律责任。
如有侵权,请及时联系,firedragonpzy将尽快处理。Cocos2dx 3.0 过渡篇(十三) action的用法从一个故事说起 - 推酷
Cocos2dx 3.0 过渡篇(十三) action的用法从一个故事说起
本篇博客来自star特530,转载请注明出处。
-------------
动作到底该怎么玩?说的也就是runAction这货了。
如果你觉得本文还是在写像MoveTo,SacleTo这类动作的用法的话,那你就错了。那样不够厚道。当然了,像Sequence,Spawn这类的东西多少也是会涉及到一点的。那到底要写什么呢?我们的故事从这里开始。
首先我们创建俩精灵,就命名为boy 和 girl 吧。
auto size = Director::getInstance()->getWinSize();
auto boy = Sprite::create("boy.png");
boy->setPosition(Point(0,size.height/2));//将boy的位置设置在最左边
this->addChild(boy,1);
auto girl = Sprite::create("girl.png");
girl->setPosition(Point(size.width,size.height/2));//将girl的位置设置在最右边
this->addChild(girl,1);
(故事的开始,boy 和 girl互相都不认识,直到有一天,俩人相遇了)
boy 和 girl 同时运动到场景中间
boy->runAction(MoveTo::create(1.0f,Point(size.width/2-20,size.height/2)));//boy的速度明显比girl的快。
girl->runAction(MoveTo::create(1.5f,Point(size.width/2 +10,size.height/2)));
(boy看到girl的那一刻,惊呆了。他知道,她就是他一直在寻找的那个人。这,就是一见钟情)
boy用原地旋转360 + 全身血液膨胀来表达他的激动心情。表现方式有两种:
//1、边旋转边全身膨胀
boy->runAction(Spawn::create(RotateBy::create(1.0f,360),ScaleTo::create(1.0f,1.2f),NULL));
//2、先旋转完再全身膨胀
boy->runAction(Sequence::create(RotateBy::create(1.0f,360),ScaleTo::create(1.0f,1.2f),NULL));
(girl 看到 膨胀后的 boy,不禁觉得 boy好是高大威风(吐槽!),于是芳心暗许)
这里表现的动作就是 girl要在boy旋转+放大的动作做完后,才表现出她的...额,她的什么来着?对了,女的比较活泼,应该跳起来。恩,于是girl跳了起来。
//这里的重点是girl应该怎样才能在boy做完action后执行她的动作呢?有以下几种办法
//1、用延迟的DelayTime来实现,也就是boy运动完后延迟几秒,然后让girl运动
//延迟2.5s,用1s时间跳了3次,跳跃高度100像素,并且向右移动了30像素
girl->runAction(Sequence::create(DelayTime::create(2.5f),JumpBy::create(1.0f,Point(30,0),100,3),NULL));
//2、用回调函数实现,当boy完成后,写一个lambda表达式来实现girl要做的动作(lambda表达式的使用可以参考我上一篇博客)
boy->runAction(Sequence::create(RotateBy::create(1.0f,360),ScaleTo::create(1.0f,1.2f),
CallFunc::create([=]()
//用1s时间跳了3次,跳跃高度100像素,并且向右移动了30像素
girl->runAction(JumpBy::create(1.0f,Point(30,0),100,3));
}),NULL));
//3、用现成的接口TargetedAction();
auto jump = JumpBy::create(1.0f,Point(30,0),100,3);//先写一个跳跃的动作
auto targetAct = TargetedAction::create(girl,jump);//写一个目标动作,将动作执行人girl和要执行的动作jump放入其中
//将girl的目标动作放入boy的sequence里去
boy->runAction(Sequence::create(RotateBy::create(1.0f,360),ScaleTo::create(1.0f,1.2f),targetAct,NULL));
(最后的剧情就是俩人很快的就在一起了,虽然认识时间不长,但他俩有足够的时间来认识对方,了解对方。用四年的时间来证明自己的眼光是对的)
有情人终成眷属,故事的最后,允许我用一颗闪烁的心来表达对他们的祝福。希望他们能永远在一起!!!
//创建逐帧动画
auto spriteFrameCache = SpriteFrameCache::sharedSpriteFrameCache();
spriteFrameCache->addSpriteFramesWithFile("heart.plist");
//将动画图片的plist放入缓存中
SpriteFrame* frame = NULL;
auto frameArray = Array::create();
for(int i=0;ispriteFrameByName(CCString::createWithFormat("%s%d.png","heart",i)->getCString());
frameArray->addObject(frame);
auto animation = Animation::createWithSpriteFrames(frameArray,0.15f);
auto animate = Animate::create(animation);//创建一个动画
auto heard_sp = Sprite::create("heart.png");
heard_sp->setPosition(Point(size.width/2,size.height-200));
heard_sp->runAction(animate);//播放动画
this->addChild(heard_sp,2);
故事简单,过程却没那么容易,结局也没想象的那么美好。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致7624人阅读
微信公众平台(10)
现在都很少发3.0过渡篇这一系列的博文了,原因是多方面的,一个是游戏开发进度,虽然上面并没给我什么压力,但我自己一直在赶。另一方面是个人私生活这块,五月份确实是多事之秋,有时候真的没办法全心思去研究新东西。有的人肯定会说:那你怎么有时间写《玩转微信...》的博客。我的回答是理性的:要你管?!开个玩笑,其实我对微信公众平台的开发研究不深,写那些也都比较简单, 不用花太多心思(最多耍耍嘴皮子)。更何况还可以将自己之前的学习心得记录下来,免得再过段时间都忘光光~~。--------回归正题,Cocos2d-x v3.1 RC0 在今天上午发布,不得不感慨cocos2dx版本发布之快,如果可以吐槽的话,我只想说:...呵呵...(有人跟我说呵呵表示冷笑的意思)。将最新版本下载下来后,首先要做的肯定是在cmd下初始化下setup.py这些碗糕(为什么我有一种每周都在和setup.py打交道的错觉?),不过这次不用再重新设置NDK,SDK,ANT的路径,它都帮你找好了。也不知道这个功能是3.0rc0就有了还是这个版本才有的,反正记不清了。下面进入大家最期待的的打灰机环节。这里用到了Sprite3D这个较新的类,先来看下几个API/// creates a Sprite3D,创建
static Sprite3D* create(const std::string &modelPath);
// creates a Sprite3D. It only supports one texture, and overrides the internal texture with 'texturePath'
static Sprite3D* create(const std::string &modelPath, const std::string &texturePath);
//set texture,设置纹理
void setTexture(const std::string& texFile);
void setTexture(Texture2D* texture);这里的model是一个obj类型的文件,我也是第一次接触这货,总之它有和.png图片配合使用,原理应该类似于plist与png之间的基情关系。下面开始创建一个3D灰机。我会告诉你灰机的资源是直接从Cocos2dx test的资源里拿的吗?auto huiJi = Sprite3D::create(&boss1.obj&);
huiJi-&setTexture(&boss.png&);
huiJi-&setPosition(Point(350,350));
huiJi-&setScale(20.f);//因为图片比较小,所以这里的放大倍数要大点效果如下:当然了,既然是3D的,那肯定要来点动作特效吧?这里我觉得用旋转的效果最好:auto rep = RepeatForever::create(RotateBy::create(3,360));
huiJi-&runAction(rep);//一直转啊转啊转效果来了:恩,为了营造一个文明,健康向上的博客氛围,以上灰机的相关介绍我就先说到这啦。既然Sprite3D都出来了,那么RotateBy3D这货果断藏不住了!当然了,其实并没有RotateBy3D这个类,当前还是用RotateBy来实现3D旋转效果,API如下:static RotateBy* create(float duration, const Vec3& deltaAngle3D);第一个参数就不用说了,旋转时间嘛。第二个参数的Vec3是什么?哈哈哈哈,我也不知道.......很明显这个也是3.0rc0后才出来的,等有了解了再分享给大家吧。恩,不过用法还是比较容易理解的,看Vec3里的参数如下:Vec3(float xx, float yy, float zz)这里的xx,yy,zz三个参数可以理解成三维坐标里的x,y,z。水平的那条就是x轴,竖直的是y轴,往里面的是z轴。所以如果Vec3的参数是这样的Vec3(360,0,0)则表示对象以x方向为轴旋转。实现如下:auto actionBy1 = RotateBy::create(4, Vec3(360, 0, 0));
huiJi-&runAction(actionBy1);运行效果我就不截图了,大家自己试下就知道。如果不是要让灰机运动,而是直接给它设置一个旋转角度也一样是可以的,用下面这个API:virtual void setRotation3D(const Vec3& rotation);原理和RotateBy3D一样,使用如下:huiJi-&setRotation3D(Vec3(90,0,0));让灰机以x方向为轴旋转90°,效果如下:怕大家误解,这里我在强调一下,RotateBy3D 不仅对Sprite3D创建出来的对象有效,对其他对象也一样有效,如Sprite等。好了,灰机这个话题我真的不能再继续下去了。就扯到这吧。尊重原创,转载请注明来源:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:649322次
积分:8385
积分:8385
排名:第1648名
原创:106篇
转载:22篇
评论:702条
文章:10篇
阅读:52431
文章:16篇
阅读:84503
文章:31篇
阅读:322198
(1)(9)(1)(16)(15)(11)(8)(7)(2)(1)(1)(7)(3)(1)(19)(26)}

我要回帖

更多关于 cocos2dx3.0下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信