适用平台:Mac/iOS/Android
auto model = Sprite3D::create("3dmodel.obj", "texture.png");
model->setOutline(1.5, Color3B(0,0,0)); // 设置发光宽度1.5,黑色
3D API是Cocos2d-x v3.0就具有的属性,源码可以到Node上看。
node->setPosition3D(Vertex3F(x,y,z));//设置位置 Vertex3F pos = node->getPosition3D(); node->setRotation3D(Vertex3F(x,y,z));//设置旋转 Vertex3F rot = node->getRotation3D();其中Vertex3F当然就是指定了三维空间。而3D API同样也移植到了一些动作中,比如:
node->runAction(RotateBy::create(Vertex3F(x,y,z)));
完全没问题。
关键点:①主界面3D飞机的实现
//Plane.cpp _Model = Sprite3D::create("playerv002.obj", "playerv002_256.png"); if(_Model){ _Model->setScale(55); ((Sprite3D*)_Model)->setOutline(0.035, Color3B::BLACK); _Model->setRotation3D(Vertex3F(originX,originY,originZ)); this->setRotation3D(Vertex3F(originX, originY, originZ)); this->addChild(_Model); this->scheduleUpdate(); }②对数学感兴趣的可以研究一下scheduleUpdate怎样让飞机晃啊晃。。。粒子系统这里就不再重复了。
void Plane::update(float dt) { pRate+=0.01; _Model->setRotation3D(Vertex3F(0-pXA*sin(pXW*pRate),0,0-pZA*sin(pZW*pRate))); }
③cocos Logo的旋转动画
void LoadingScene::InitCoco() { Size visibleSize = Director::getInstance()->getVisibleSize(); auto coco = Sprite3D::create("coconut.obj", "coco.png"); if(coco) { coco->setPosition(Point(visibleSize.width/2, visibleSize.height/2-150)); coco->setOutline(10,Color3B(0,0,0)); addChild(coco,1); coco->runAction(RepeatForever::create(RotateBy::create(0.8f,Vertex3F(0,360,0)))); } }
除了一些数学上的计算比较羞涩意外,整个游戏的逻辑还是比较简单的。。。这里就不细说了,大家直接看源码吧。。。