Skip to content

Instantly share code, notes, and snippets.

@mumreg
Created May 16, 2016 10:26
Show Gist options
  • Save mumreg/52b2ab40ee5e3a91dcf63d7330c939bf to your computer and use it in GitHub Desktop.
Save mumreg/52b2ab40ee5e3a91dcf63d7330c939bf to your computer and use it in GitHub Desktop.
Little snippet of how to create sandwich scene with 2D-3D-2D layers in cocos2d-x
#include "Test3dScene.h"
#include "2d/CCActionInterval.h"
#include "2d/CCCamera.h"
#include "2d/CCSprite.h"
#include "3d/CCAnimate3D.h"
#include "3d/CCAnimation3D.h"
#include "3d/CCSprite3D.h"
#include "base/CCDirector.h"
#include "base/ccTypes.h"
#include "math/CCGeometry.h"
#include "math/Vec2.h"
#include "math/Vec3.h"
#include <vector>
using namespace cocos2d;
bool Test3dScene::init()
{
if (!cocos2d::Scene::init())
return false;
m_3d = Node::create();
m_front = Node::create();
m_background = Node::create();
auto visibleSize = Director::getInstance()->getVisibleSize();
m_cameras.resize(3);
Camera* ca = nullptr;
ca = m_cameras[CAMERA_BG] = Camera::create();
ca->setDepth(CAMERA_BG);
ca->setCameraFlag(CameraFlag::USER1);
m_background->addChild(ca);
auto backgroundSprite = cocos2d::Sprite::create("3d/texture.png");
backgroundSprite->setColor(cocos2d::Color3B(0, 255, 0));
backgroundSprite->setPosition(cocos2d::Vec2(150, 150));
backgroundSprite->setCameraMask((unsigned short)CameraFlag::USER1, true);
m_background->addChild(backgroundSprite);
addChild(m_background);
ca = m_cameras[CAMERA_3D] =
Camera::create();
ca->setDepth(CAMERA_3D);
ca->setCameraFlag(CameraFlag::USER2);
m_3d->addChild(ca);
auto copter = createCopter();
copter->setCameraMask((unsigned short)CameraFlag::USER2, true);
m_3d->addChild(copter);
addChild(m_3d);
ca = m_cameras[CAMERA_FG] = this->getDefaultCamera();
ca->setDepth(CAMERA_FG);
auto frontSprite = cocos2d::Sprite::create("3d/texture.png");
frontSprite->setColor(cocos2d::Color3B(255, 0, 0));
frontSprite->setPosition(cocos2d::Vec2(180, 180));
frontSprite->setCameraMask((unsigned short)CameraFlag::DEFAULT, true);
m_front->addChild(frontSprite);
addChild(m_front);
return true;
}
Sprite3D* Test3dScene::createCopter()
{
auto copter = cocos2d::Sprite3D::create("3d/copter_test_01.c3b");
auto w = cocos2d::Director::getInstance()->getWinSize();
copter->setPosition(200, 200);
copter->setTexture("3d/texture.png");
copter->setScale(0.75f);
copter->setRotation3D(cocos2d::Vec3(-30,180,30));
auto animation = cocos2d::Animation3D::create("3d/copter_test_01.c3b");
auto animate = cocos2d::Animate3D::create(animation);
float speed = 1.0f;
animate->setSpeed(speed);
copter->runAction(cocos2d::RepeatForever::create(animate));
return copter;
}
#ifndef CLASSES_TEST3DSCENE_H_
#define CLASSES_TEST3DSCENE_H_
#include "2d/CCScene.h"
#include "platform/CCPlatformMacros.h"
#include <vector>
namespace cocos2d
{
class Sprite3D;
}
class Test3dScene : public cocos2d::Scene
{
public:
CREATE_FUNC(Test3dScene);
bool init() override;
private:
cocos2d::Sprite3D* createCopter();
enum { CAMERA_BG = 0, CAMERA_3D, CAMERA_FG };
cocos2d::Node* m_background;
cocos2d::Node* m_3d;
cocos2d::Node* m_front;
std::vector<cocos2d::Camera*> m_cameras;
};
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment