axmol/samples/Cpp/TestCpp/Classes/TransitionsTest/TransitionsTest.cpp

489 lines
12 KiB
C++
Raw Normal View History

#include "TransitionsTest.h"
#include "../testResource.h"
#include "CCConfiguration.h"
#define TRANSITION_DURATION (1.2f)
class FadeWhiteTransition : public TransitionFade
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionFade::create(t, s, Color3B::WHITE);
2010-08-20 14:35:37 +08:00
}
};
class FlipXLeftOver : public TransitionFlipX
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionFlipX::create(t, s, TransitionScene::Orientation::LEFT_OVER);
2010-08-20 14:35:37 +08:00
}
};
class FlipXRightOver : public TransitionFlipX
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionFlipX::create(t, s, TransitionScene::Orientation::RIGHT_OVER);
2010-08-20 14:35:37 +08:00
}
};
class FlipYUpOver : public TransitionFlipY
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionFlipY::create(t, s, TransitionScene::Orientation::UP_OVER);
2010-08-20 14:35:37 +08:00
}
};
class FlipYDownOver : public TransitionFlipY
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionFlipY::create(t, s, TransitionScene::Orientation::DOWN_OVER);
2010-08-20 14:35:37 +08:00
}
};
class FlipAngularLeftOver : public TransitionFlipAngular
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionFlipAngular::create(t, s, TransitionScene::Orientation::LEFT_OVER);
2010-08-20 14:35:37 +08:00
}
};
class FlipAngularRightOver : public TransitionFlipAngular
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionFlipAngular::create(t, s, TransitionScene::Orientation::RIGHT_OVER);
2010-08-20 14:35:37 +08:00
}
};
class ZoomFlipXLeftOver : public TransitionZoomFlipX
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionZoomFlipX::create(t, s, TransitionScene::Orientation::LEFT_OVER);
2010-08-20 14:35:37 +08:00
}
};
class ZoomFlipXRightOver : public TransitionZoomFlipX
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionZoomFlipX::create(t, s, TransitionScene::Orientation::RIGHT_OVER);
2010-08-20 14:35:37 +08:00
}
};
class ZoomFlipYUpOver : public TransitionZoomFlipY
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionZoomFlipY::create(t, s, TransitionScene::Orientation::UP_OVER);
2010-08-20 14:35:37 +08:00
}
};
class ZoomFlipYDownOver : public TransitionZoomFlipY
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionZoomFlipY::create(t, s, TransitionScene::Orientation::DOWN_OVER);
2010-08-20 14:35:37 +08:00
}
};
class ZoomFlipAngularLeftOver : public TransitionZoomFlipAngular
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionZoomFlipAngular::create(t, s, TransitionScene::Orientation::LEFT_OVER);
2010-08-20 14:35:37 +08:00
}
};
class ZoomFlipAngularRightOver : public TransitionZoomFlipAngular
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
return TransitionZoomFlipAngular::create(t, s, TransitionScene::Orientation::RIGHT_OVER);
2010-08-20 14:35:37 +08:00
}
};
class PageTransitionForward : public TransitionPageTurn
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
Director::getInstance()->setDepthTest(true);
return TransitionPageTurn::create(t, s, false);
2010-08-20 14:35:37 +08:00
}
};
class PageTransitionBackward : public TransitionPageTurn
2010-08-20 14:35:37 +08:00
{
public:
static TransitionScene* create(float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
Director::getInstance()->setDepthTest(true);
return TransitionPageTurn::create(t, s, true);
2010-08-20 14:35:37 +08:00
}
};
#define STRINGIFY(x) #x
#define TRANS(__className__) { \
[](float t, Scene* s){ return __className__::create(t,s);}, \
STRINGIFY(__className__), \
}
struct _transitions {
std::function<TransitionScene*(float t, Scene* s)> function;
const char * name;
} transitions[] = {
TRANS(TransitionJumpZoom),
TRANS(TransitionProgressRadialCCW),
TRANS(TransitionProgressRadialCW),
TRANS(TransitionProgressHorizontal),
TRANS(TransitionProgressVertical),
TRANS(TransitionProgressInOut),
TRANS(TransitionProgressOutIn),
TRANS(TransitionCrossFade),
TRANS(PageTransitionForward),
TRANS(PageTransitionBackward),
TRANS(TransitionFadeTR),
TRANS(TransitionFadeBL),
TRANS(TransitionFadeUp),
TRANS(TransitionFadeDown),
TRANS(TransitionTurnOffTiles),
TRANS(TransitionSplitRows),
TRANS(TransitionSplitCols),
TRANS(TransitionFade),
TRANS(FadeWhiteTransition),
TRANS(FlipXLeftOver),
TRANS(FlipXRightOver),
TRANS(FlipYUpOver),
TRANS(FlipYDownOver),
TRANS(FlipAngularLeftOver),
TRANS(FlipAngularRightOver),
TRANS(ZoomFlipXLeftOver),
TRANS(ZoomFlipXRightOver),
TRANS(ZoomFlipYUpOver),
TRANS(ZoomFlipYDownOver),
TRANS(ZoomFlipAngularLeftOver),
TRANS(ZoomFlipAngularRightOver),
TRANS(TransitionShrinkGrow),
TRANS(TransitionRotoZoom),
TRANS(TransitionMoveInL),
TRANS(TransitionMoveInR),
TRANS(TransitionMoveInT),
TRANS(TransitionMoveInB),
TRANS(TransitionSlideInL),
TRANS(TransitionSlideInR),
TRANS(TransitionSlideInT),
TRANS(TransitionSlideInB),
};
#define MAX_LAYER (sizeof(transitions) / sizeof(transitions[0]))
static int s_nSceneIdx = 0;
TransitionScene* createTransition(int index, float t, Scene* s)
2010-08-20 14:35:37 +08:00
{
// fix bug #486, without setDepthTest(false), FlipX,Y will flickers
Director::getInstance()->setDepthTest(false);
return transitions[index].function(t,s);
}
void TransitionsTestScene::runThisTest()
{
auto layer = new TestLayer1();
addChild(layer);
layer->release();
Director::getInstance()->replaceScene(this);
}
TestLayer1::TestLayer1(void)
{
2010-08-20 14:35:37 +08:00
float x,y;
auto size = Director::getInstance()->getWinSize();
2010-08-20 14:35:37 +08:00
x = size.width;
y = size.height;
auto bg1 = Sprite::create(s_back1);
2013-07-12 14:11:55 +08:00
bg1->setPosition( Point(size.width/2, size.height/2) );
2010-08-20 14:35:37 +08:00
addChild(bg1, -1);
auto title = LabelTTF::create( (transitions[s_nSceneIdx]).name, "Thonburi", 32 );
2010-08-20 14:35:37 +08:00
addChild(title);
title->setColor( Color3B(255,32,32) );
2013-07-12 14:11:55 +08:00
title->setPosition( Point(x/2, y-100) );
2010-08-20 14:35:37 +08:00
auto label = LabelTTF::create("SCENE 1", "Marker Felt", 38);
label->setColor( Color3B(16,16,255));
2013-07-12 14:11:55 +08:00
label->setPosition( Point(x/2,y/2));
2010-08-20 14:35:37 +08:00
addChild( label);
// menu
auto item1 = MenuItemImage::create(s_pathB1, s_pathB2, CC_CALLBACK_1(TestLayer1::backCallback, this) );
auto item2 = MenuItemImage::create(s_pathR1, s_pathR2, CC_CALLBACK_1(TestLayer1::restartCallback, this) );
auto item3 = MenuItemImage::create(s_pathF1, s_pathF2, CC_CALLBACK_1(TestLayer1::nextCallback, this) );
2010-08-20 14:35:37 +08:00
auto menu = Menu::create(item1, item2, item3, NULL);
2010-08-20 14:35:37 +08:00
menu->setPosition( Point::ZERO );
2013-07-12 14:11:55 +08:00
item1->setPosition(Point(VisibleRect::center().x - item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2));
item2->setPosition(Point(VisibleRect::center().x, VisibleRect::bottom().y+item2->getContentSize().height/2));
item3->setPosition(Point(VisibleRect::center().x + item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2));
2010-08-20 14:35:37 +08:00
addChild(menu, 1);
2010-08-20 14:35:37 +08:00
schedule( schedule_selector(TestLayer1::step), 1.0f);
}
TestLayer1::~TestLayer1(void)
{
}
void TestLayer1::restartCallback(Object* sender)
2010-08-20 14:35:37 +08:00
{
auto s = new TransitionsTestScene();
2010-08-20 14:35:37 +08:00
auto layer = new TestLayer2();
s->addChild(layer);
2010-08-20 14:35:37 +08:00
auto scene = createTransition(s_nSceneIdx, TRANSITION_DURATION, s);
s->release();
layer->release();
if (scene)
2010-08-20 17:08:30 +08:00
{
Director::getInstance()->replaceScene(scene);
2010-08-20 17:08:30 +08:00
}
2010-08-20 14:35:37 +08:00
}
void TestLayer1::nextCallback(Object* sender)
2010-08-20 14:35:37 +08:00
{
2010-08-25 17:56:30 +08:00
s_nSceneIdx++;
s_nSceneIdx = s_nSceneIdx % MAX_LAYER;
auto s = new TransitionsTestScene();
2010-08-20 14:35:37 +08:00
auto layer = new TestLayer2();
s->addChild(layer);
2010-08-20 14:35:37 +08:00
auto scene = createTransition(s_nSceneIdx, TRANSITION_DURATION, s);
s->release();
layer->release();
if (scene)
2010-08-20 17:08:30 +08:00
{
Director::getInstance()->replaceScene(scene);
2010-08-20 17:08:30 +08:00
}
2010-08-20 14:35:37 +08:00
}
void TestLayer1::backCallback(Object* sender)
{
2010-08-25 17:56:30 +08:00
s_nSceneIdx--;
int total = MAX_LAYER;
if( s_nSceneIdx < 0 )
s_nSceneIdx += total;
auto s = new TransitionsTestScene();
2010-08-20 14:35:37 +08:00
auto layer = new TestLayer2();
s->addChild(layer);
2010-08-20 14:35:37 +08:00
auto scene = createTransition(s_nSceneIdx, TRANSITION_DURATION, s);
s->release();
layer->release();
if (scene)
2010-08-20 17:08:30 +08:00
{
Director::getInstance()->replaceScene(scene);
}
}
2012-06-08 13:55:28 +08:00
void TestLayer1::step(float dt)
{
}
void TestLayer1::onEnter()
{
Layer::onEnter();
log("Scene 1 onEnter");
}
void TestLayer1::onEnterTransitionDidFinish()
{
Layer::onEnterTransitionDidFinish();
log("Scene 1: onEnterTransitionDidFinish");
}
void TestLayer1::onExitTransitionDidStart()
{
Layer::onExitTransitionDidStart();
log("Scene 1: onExitTransitionDidStart");
}
void TestLayer1::onExit()
{
Layer::onExit();
log("Scene 1 onExit");
}
TestLayer2::TestLayer2()
{
2010-08-20 14:35:37 +08:00
float x,y;
auto size = Director::getInstance()->getWinSize();
2010-08-20 14:35:37 +08:00
x = size.width;
y = size.height;
auto bg1 = Sprite::create(s_back2);
2013-07-12 14:11:55 +08:00
bg1->setPosition( Point(size.width/2, size.height/2) );
2010-08-20 14:35:37 +08:00
addChild(bg1, -1);
auto title = LabelTTF::create((transitions[s_nSceneIdx]).name, "Thonburi", 32 );
2010-08-20 14:35:37 +08:00
addChild(title);
title->setColor( Color3B(255,32,32) );
2013-07-12 14:11:55 +08:00
title->setPosition( Point(x/2, y-100) );
2010-08-20 14:35:37 +08:00
auto label = LabelTTF::create("SCENE 2", "Marker Felt", 38);
label->setColor( Color3B(16,16,255));
2013-07-12 14:11:55 +08:00
label->setPosition( Point(x/2,y/2));
2010-08-20 14:35:37 +08:00
addChild( label);
// menu
auto item1 = MenuItemImage::create(s_pathB1, s_pathB2, CC_CALLBACK_1(TestLayer2::backCallback, this) );
auto item2 = MenuItemImage::create(s_pathR1, s_pathR2, CC_CALLBACK_1(TestLayer2::restartCallback, this) );
auto item3 = MenuItemImage::create(s_pathF1, s_pathF2, CC_CALLBACK_1(TestLayer2::nextCallback, this) );
2010-08-20 14:35:37 +08:00
auto menu = Menu::create(item1, item2, item3, NULL);
2010-08-20 14:35:37 +08:00
menu->setPosition( Point::ZERO );
2013-07-12 14:11:55 +08:00
item1->setPosition(Point(VisibleRect::center().x - item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2));
item2->setPosition(Point(VisibleRect::center().x, VisibleRect::bottom().y+item2->getContentSize().height/2));
item3->setPosition(Point(VisibleRect::center().x + item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2));
2010-08-20 14:35:37 +08:00
addChild(menu, 1);
2010-08-20 14:35:37 +08:00
schedule(schedule_selector(TestLayer2::step), 1.0f);
}
TestLayer2::~TestLayer2()
{
}
void TestLayer2::restartCallback(Object* sender)
2010-08-20 14:35:37 +08:00
{
auto s = new TransitionsTestScene();
2010-08-20 14:35:37 +08:00
auto layer = new TestLayer1();
s->addChild(layer);
2010-08-20 14:35:37 +08:00
auto scene = createTransition(s_nSceneIdx, TRANSITION_DURATION, s);
s->release();
layer->release();
if (scene)
2010-08-20 17:08:30 +08:00
{
Director::getInstance()->replaceScene(scene);
2010-08-20 17:08:30 +08:00
}
2010-08-20 14:35:37 +08:00
}
void TestLayer2::nextCallback(Object* sender)
2010-08-20 14:35:37 +08:00
{
2010-08-25 17:56:30 +08:00
s_nSceneIdx++;
s_nSceneIdx = s_nSceneIdx % MAX_LAYER;
auto s = new TransitionsTestScene();
2010-08-20 14:35:37 +08:00
auto layer = new TestLayer1();
s->addChild(layer);
2010-08-20 14:35:37 +08:00
auto scene = createTransition(s_nSceneIdx, TRANSITION_DURATION, s);
s->release();
layer->release();
if (scene)
2010-08-20 17:08:30 +08:00
{
Director::getInstance()->replaceScene(scene);
2010-08-20 17:08:30 +08:00
}
2010-08-20 14:35:37 +08:00
}
void TestLayer2::backCallback(Object* sender)
{
2010-08-25 17:56:30 +08:00
s_nSceneIdx--;
int total = MAX_LAYER;
if( s_nSceneIdx < 0 )
s_nSceneIdx += total;
auto s = new TransitionsTestScene();
2010-08-20 14:35:37 +08:00
auto layer = new TestLayer1();
s->addChild(layer);
2010-08-20 14:35:37 +08:00
auto scene = createTransition(s_nSceneIdx, TRANSITION_DURATION, s);
s->release();
layer->release();
if (scene)
2010-08-20 17:08:30 +08:00
{
Director::getInstance()->replaceScene(scene);
}
}
2012-06-08 13:55:28 +08:00
void TestLayer2::step(float dt)
{
}
void TestLayer2::onEnter()
{
Layer::onEnter();
log("Scene 2 onEnter");
}
void TestLayer2::onEnterTransitionDidFinish()
{
Layer::onEnterTransitionDidFinish();
log("Scene 2: onEnterTransitionDidFinish");
}
void TestLayer2::onExitTransitionDidStart()
{
Layer::onExitTransitionDidStart();
log("Scene 2: onExitTransitionDidStart");
}
void TestLayer2::onExit()
{
Layer::onExit();
log("Scene 2 onExit");
}