Merge pull request #995 from minggo/gles20

Synchronize some codes
This commit is contained in:
minggo 2012-06-11 03:27:12 -07:00
commit ea613be58a
10 changed files with 396 additions and 101 deletions

View File

@ -521,7 +521,7 @@ static BOOL _mixerRateSet = NO;
if (soundId >= bufferTotal) {
//Need to resize the buffers
int requiredIncrement = CD_BUFFERS_INCREMENT;
while (bufferTotal + requiredIncrement < soundId) {
while (bufferTotal + requiredIncrement <= soundId) {
requiredIncrement += CD_BUFFERS_INCREMENT;
}
CDLOGINFO(@"Denshion::CDSoundEngine - attempting to resize buffers by %i for sound %i",requiredIncrement,soundId);

View File

@ -36,6 +36,8 @@
#include "support/CCPointExtension.h"
#include "CCActionCatmullRom.h"
using namespace std;
NS_CC_BEGIN;
/*
@ -78,6 +80,7 @@ CCObject* CCPointArray::copyWithZone(cocos2d::CCZone *zone)
}
CCPointArray *points = CCPointArray::arrayWithCapacity(10);
points->retain();
points->setControlPoints(newArray);
newArray->release();
@ -91,14 +94,30 @@ CCPointArray::~CCPointArray()
CCPointArray::CCPointArray() :m_pControlPoints(NULL){}
void CCPointArray::addControlPoint(CCPoint &controlPoint)
void CCPointArray::addControlPoint(CCPoint controlPoint)
{
m_pControlPoints->addObject(&controlPoint);
// should create a new object of CCPoint
// because developer always use this function like this
// addControlPoint(ccp(x, y))
// passing controlPoint is a temple object
// and CCArray::addObject() will retain the passing object, so it
// should be an object created in heap
CCPoint *temp = new CCPoint(controlPoint.x, controlPoint.y);
m_pControlPoints->addObject(temp);
temp->release();
}
void CCPointArray::insertControlPoint(CCPoint &controlPoint, unsigned int index)
{
m_pControlPoints->insertObject(&controlPoint, index);
// should create a new object of CCPoint
// because developer always use this function like this
// insertControlPoint(ccp(x, y))
// passing controlPoint is a temple object
// and CCArray::insertObject() will retain the passing object, so it
// should be an object created in heap
CCPoint *temp = new CCPoint(controlPoint.x, controlPoint.y);
m_pControlPoints->insertObject(temp, index);
temp->release();
}
CCPoint CCPointArray::getControlPointAtIndex(unsigned int index)
@ -111,7 +130,15 @@ CCPoint CCPointArray::getControlPointAtIndex(unsigned int index)
void CCPointArray::replaceControlPoint(cocos2d::CCPoint &controlPoint, unsigned int index)
{
m_pControlPoints->replaceObjectAtIndex(index, &controlPoint);
// should create a new object of CCPoint
// because developer always use this function like this
// replaceControlPoint(ccp(x, y))
// passing controlPoint is a temple object
// and CCArray::insertObject() will retain the passing object, so it
// should be an object created in heap
CCPoint *temp = new CCPoint(controlPoint.x, controlPoint.y);
m_pControlPoints->replaceObjectAtIndex(index, temp);
temp->release();
}
void CCPointArray::removeControlPointAtIndex(unsigned int index)
@ -136,7 +163,6 @@ CCPointArray* CCPointArray::reverse()
newArray->release();
config->autorelease();
return config;
}

View File

@ -59,7 +59,7 @@ public:
bool initWithCapacity(unsigned int capacity);
/** appends a control point */
void addControlPoint(CCPoint &controlPoint);
void addControlPoint(CCPoint controlPoint);
/** inserts a controlPoint at index */
void insertControlPoint(CCPoint &controlPoint, unsigned int index);

View File

@ -85,7 +85,7 @@ default gl blend src function. Compatible with premultiplied alpha images.
#define CC_NODE_DRAW_SETUP() \
do { \
ccGLEnable( m_glServerState ); \
CCAssert(getShaderProgram(), "No shader program set for node: %p", this); \
CCAssert(getShaderProgram(), "No shader program set for this node"); \
{ \
getShaderProgram()->use(); \
getShaderProgram()->setUniformForModelViewProjectionMatrix(); \

View File

@ -1 +1 @@
b77ecad7976dbe21bb61300c73e06ddbad3a4bd8
c16d1dddb12b5a7e7e715f234dfd031657369f96

View File

@ -90,7 +90,7 @@ void ActionManagerTest::onEnter()
CCLabelTTF* label = CCLabelTTF::labelWithString(title().c_str(), "Arial", 32);
addChild(label, 1);
label->setPosition( CCPointMake(s.width/2, s.height-50) );
label->setPosition(CCPointMake(s.width/2, s.height-50));
CCMenuItemImage *item1 = CCMenuItemImage::itemWithNormalImage(s_pPathB1, s_pPathB2, this, menu_selector(ActionManagerTest::backCallback) );
CCMenuItemImage *item2 = CCMenuItemImage::itemWithNormalImage(s_pPathR1, s_pPathR2, this, menu_selector(ActionManagerTest::restartCallback) );
@ -98,10 +98,10 @@ void ActionManagerTest::onEnter()
CCMenu *menu = CCMenu::menuWithItems(item1, item2, item3, NULL);
menu->setPosition( CCPointZero );
item1->setPosition( CCPointMake( s.width/2 - 100,30) );
item2->setPosition( CCPointMake( s.width/2, 30) );
item3->setPosition( CCPointMake( s.width/2 + 100,30) );
menu->setPosition(CCPointZero);
item1->setPosition(CCPointMake(s.width/2 - item2->getContentSize().width*2, item2->getContentSize().height/2));
item2->setPosition(CCPointMake(s.width/2, item2->getContentSize().height/2));
item3->setPosition(CCPointMake(s.width/2 + item2->getContentSize().width*2, item2->getContentSize().height/2));
addChild(menu, 1);
}

View File

@ -617,8 +617,10 @@ EaseSpriteDemo::~EaseSpriteDemo(void)
void EaseSpriteDemo::positionForTwo()
{
m_grossini->setPosition( CCPointMake( 60, 120 ) );
m_tamara->setPosition( CCPointMake( 60, 220) );
CCSize s = CCDirector::sharedDirector()->getWinSize();
m_grossini->setPosition(CCPointMake(60, s.height*1/5));
m_tamara->setPosition(CCPointMake( 60, s.height*4/5));
m_kathia->setIsVisible(false);
}
@ -643,13 +645,13 @@ void EaseSpriteDemo::onEnter()
CCSize s = CCDirector::sharedDirector()->getWinSize();
m_grossini->setPosition( CCPointMake(60, 50) );
m_kathia->setPosition( CCPointMake(60, 150) );
m_tamara->setPosition( CCPointMake(60, 250) );
m_grossini->setPosition(CCPointMake(60, s.height*1/5));
m_kathia->setPosition(CCPointMake(60, s.height*2.5f/5));
m_tamara->setPosition(CCPointMake(60, s.height*4/5));
CCLabelTTF* label = CCLabelTTF::labelWithString(title().c_str(), "Arial", 32);
addChild(label);
label->setPosition( CCPointMake(s.width/2, s.height-50) );
label->setPosition(CCPointMake(s.width/2, s.height-50));
CCMenuItemImage *item1 = CCMenuItemImage::itemWithNormalImage(s_pPathB1, s_pPathB2, this, menu_selector(EaseSpriteDemo::backCallback) );
CCMenuItemImage *item2 = CCMenuItemImage::itemWithNormalImage(s_pPathR1, s_pPathR2, this, menu_selector(EaseSpriteDemo::restartCallback) );
@ -657,10 +659,10 @@ void EaseSpriteDemo::onEnter()
CCMenu *menu = CCMenu::menuWithItems(item1, item2, item3, NULL);
menu->setPosition( CCPointZero );
item1->setPosition( CCPointMake( s.width/2 - 100,30) );
item2->setPosition( CCPointMake( s.width/2, 30) );
item3->setPosition( CCPointMake( s.width/2 + 100,30) );
menu->setPosition(CCPointZero);
item1->setPosition(CCPointMake(s.width/2 - item2->getContentSize().width*2, item2->getContentSize().height/2));
item2->setPosition(CCPointMake( s.width/2, item2->getContentSize().height/2));
item3->setPosition(CCPointMake( s.width/2 + item2->getContentSize().width*2, item2->getContentSize().height/2));
addChild(menu, 1);
}

View File

@ -111,10 +111,10 @@ void SpriteDemo::onEnter()
CCMenuItemImage *item3 = CCMenuItemImage::itemWithNormalImage(s_pPathF1, s_pPathF2, this, menu_selector(SpriteDemo::nextCallback) );
CCMenu *menu = CCMenu::menuWithItems(item1, item2, item3, NULL);
menu->setPosition( CCPointZero );
item1->setPosition( CCPointMake( s.width/2 - 100,30) );
item2->setPosition( CCPointMake( s.width/2, 30) );
item3->setPosition( CCPointMake( s.width/2 + 100,30) );
menu->setPosition(CCPointZero);
item1->setPosition(CCPointMake( s.width/2 - item2->getContentSize().width*2, item2->getContentSize().height/2));
item2->setPosition(CCPointMake( s.width/2, item2->getContentSize().height/2));
item3->setPosition(CCPointMake( s.width/2 + item2->getContentSize().width*2, item2->getContentSize().height/2));
addChild(menu, 1);
CCLayerColor *background = CCLayerColor::layerWithColor(ccc4(255,0,0,255));

View File

@ -1,5 +1,6 @@
#include "ActionsTest.h"
#include "../testResource.h"
#include "CCActionCatmullRom.h"
CCLayer* NextAction();
CCLayer* BackAction();
@ -13,72 +14,79 @@ CCLayer* CreateLayer(int nIndex)
switch (nIndex)
{
case ACTION_MANUAL_LAYER:
pLayer = new ActionManual(); break;
case ACTION_MOVE_LAYER:
pLayer = new ActionMove(); break;
case ACTION_SCALE_LAYER:
pLayer = new ActionScale(); break;
case ACTION_ROTATE_LAYER:
pLayer = new ActionRotate(); break;
case ACTION_SKEW_LAYER:
pLayer = new ActionSkew(); break;
case ACTION_SKEWROTATE_LAYER:
pLayer = new ActionSkewRotateScale(); break;
case ACTION_JUMP_LAYER:
pLayer = new ActionJump(); break;
case ACTION_BEZIER_LAYER:
pLayer = new ActionBezier(); break;
case ACTION_BLINK_LAYER:
pLayer = new ActionBlink(); break;
case ACTION_FADE_LAYER:
pLayer = new ActionFade(); break;
case ACTION_TINT_LAYER:
pLayer = new ActionTint(); break;
case ACTION_ANIMATE_LAYER:
pLayer = new ActionAnimate(); break;
case ACTION_SEQUENCE_LAYER:
pLayer = new ActionSequence(); break;
case ACTION_SEQUENCE2_LAYER:
pLayer = new ActionSequence2(); break;
case ACTION_SPAWN_LAYER:
pLayer = new ActionSpawn(); break;
case ACTION_REVERSE:
pLayer = new ActionReverse(); break;
case ACTION_DELAYTIME_LAYER:
pLayer = new ActionDelayTime(); break;
case ACTION_REPEAT_LAYER:
pLayer = new ActionRepeat(); break;
case ACTION_REPEATEFOREVER_LAYER:
pLayer = new ActionRepeatForever(); break;
case ACTION_ROTATETOREPEATE_LAYER:
pLayer = new ActionRotateToRepeat(); break;
case ACTION_ROTATEJERK_LAYER:
pLayer = new ActionRotateJerk(); break;
case ACTION_CALLFUNC_LAYER:
pLayer = new ActionCallFunc(); break;
case ACTION_CALLFUNCND_LAYER:
pLayer = new ActionCallFuncND(); break;
case ACTION_REVERSESEQUENCE_LAYER:
pLayer = new ActionReverseSequence(); break;
case ACTION_REVERSESEQUENCE2_LAYER:
pLayer = new ActionReverseSequence2(); break;
case ACTION_ORBIT_LAYER:
pLayer = new ActionOrbit(); break;
case ACTION_FLLOW_LAYER:
pLayer = new ActionFollow(); break;
case ACTION_TARGETED_LAYER:
pLayer = new ActionTargeted(); break;
case ACTION_ISSUE1305_LAYER:
pLayer = new Issue1305(); break;
case ACTION_ISSUE1305_2_LAYER:
pLayer = new Issue1305_2(); break;
case ACTION_ISSUE1288_LAYER:
pLayer = new Issue1288(); break;
case ACTION_ISSUE1288_2_LAYER:
pLayer = new Issue1288_2(); break;
case ACTION_ISSUE1327_LAYER:
pLayer = new Issue1327(); break;
case ACTION_MANUAL_LAYER:
pLayer = new ActionManual(); break;
case ACTION_MOVE_LAYER:
pLayer = new ActionMove(); break;
case ACTION_SCALE_LAYER:
pLayer = new ActionScale(); break;
case ACTION_ROTATE_LAYER:
pLayer = new ActionRotate(); break;
case ACTION_SKEW_LAYER:
pLayer = new ActionSkew(); break;
case ACTION_SKEWROTATE_LAYER:
pLayer = new ActionSkewRotateScale(); break;
case ACTION_JUMP_LAYER:
pLayer = new ActionJump(); break;
case ACTION_BEZIER_LAYER:
pLayer = new ActionBezier(); break;
case ACTION_BLINK_LAYER:
pLayer = new ActionBlink(); break;
case ACTION_FADE_LAYER:
pLayer = new ActionFade(); break;
case ACTION_TINT_LAYER:
pLayer = new ActionTint(); break;
case ACTION_ANIMATE_LAYER:
pLayer = new ActionAnimate(); break;
case ACTION_SEQUENCE_LAYER:
pLayer = new ActionSequence(); break;
case ACTION_SEQUENCE2_LAYER:
pLayer = new ActionSequence2(); break;
case ACTION_SPAWN_LAYER:
pLayer = new ActionSpawn(); break;
case ACTION_REVERSE:
pLayer = new ActionReverse(); break;
case ACTION_DELAYTIME_LAYER:
pLayer = new ActionDelayTime(); break;
case ACTION_REPEAT_LAYER:
pLayer = new ActionRepeat(); break;
case ACTION_REPEATEFOREVER_LAYER:
pLayer = new ActionRepeatForever(); break;
case ACTION_ROTATETOREPEATE_LAYER:
pLayer = new ActionRotateToRepeat(); break;
case ACTION_ROTATEJERK_LAYER:
pLayer = new ActionRotateJerk(); break;
case ACTION_CALLFUNC_LAYER:
pLayer = new ActionCallFunc(); break;
case ACTION_CALLFUNCND_LAYER:
pLayer = new ActionCallFuncND(); break;
case ACTION_REVERSESEQUENCE_LAYER:
pLayer = new ActionReverseSequence(); break;
case ACTION_REVERSESEQUENCE2_LAYER:
pLayer = new ActionReverseSequence2(); break;
case ACTION_ORBIT_LAYER:
pLayer = new ActionOrbit(); break;
case ACTION_FLLOW_LAYER:
pLayer = new ActionFollow(); break;
case ACTION_TARGETED_LAYER:
pLayer = new ActionTargeted(); break;
case ACTION_ISSUE1305_LAYER:
pLayer = new Issue1305(); break;
case ACTION_ISSUE1305_2_LAYER:
pLayer = new Issue1305_2(); break;
case ACTION_ISSUE1288_LAYER:
pLayer = new Issue1288(); break;
case ACTION_ISSUE1288_2_LAYER:
pLayer = new Issue1288_2(); break;
case ACTION_ISSUE1327_LAYER:
pLayer = new Issue1327(); break;
case ACTION_CARDINALSPLINE_LAYER:
pLayer = new ActionCardinalSpline(); break;
case ACTION_CATMULLROM_LAYER:
pLayer = new ActionCatmullRom(); break;
case PAUSERESUMEACTIONS_LAYER:
pLayer = new PauseResumeActions(); break;
default:
break;
}
@ -157,9 +165,9 @@ void ActionsDemo::onEnter()
CCSize s = CCDirector::sharedDirector()->getWinSize();
m_grossini->setPosition( CCPointMake(s.width/2, s.height/3));
m_tamara->setPosition( CCPointMake(s.width/2, 2*s.height/3));
m_kathia->setPosition( CCPointMake(s.width/2, s.height/2));
m_grossini->setPosition(CCPointMake(s.width/2, s.height/3));
m_tamara->setPosition(CCPointMake(s.width/2, 2*s.height/3));
m_kathia->setPosition(CCPointMake(s.width/2, s.height/2));
// add title and subtitle
std::string str = title();
@ -183,10 +191,10 @@ void ActionsDemo::onEnter()
CCMenu *menu = CCMenu::menuWithItems(item1, item2, item3, NULL);
menu->setPosition( CCPointZero );
item1->setPosition( CCPointMake( s.width/2 - 100,30) );
item2->setPosition( CCPointMake( s.width/2, 30) );
item3->setPosition( CCPointMake( s.width/2 + 100,30) );
menu->setPosition(CCPointZero);
item1->setPosition(CCPointMake(s.width/2 - item2->getContentSize().width*2, item2->getContentSize().height/2));
item2->setPosition(CCPointMake(s.width/2, item2->getContentSize().height/2));
item3->setPosition(CCPointMake(s.width/2 + item2->getContentSize().width*2, item2->getContentSize().height/2));
addChild(menu, 1);
}
@ -1441,3 +1449,219 @@ void Issue1327::logSprRotation(CCNode* pSender)
CCLog("%f", ((CCSprite*)pSender)->getRotation());
}
/** ActionCatmullRom
*/
void ActionCatmullRom::onEnter()
{
ActionsDemo::onEnter();
this->centerSprites(2);
CCSize s = CCDirector::sharedDirector()->getWinSize();
//
// sprite 1 (By)
//
// startPosition can be any coordinate, but since the movement
// is relative to the Catmull Rom curve, it is better to start with (0,0).
//
m_tamara->setPosition(ccp(50, 50));
CCPointArray *array = CCPointArray::arrayWithCapacity(20);
array->addControlPoint(ccp(0, 0));
array->addControlPoint(ccp(80, 80));
array->addControlPoint(ccp(s.width - 80, 80));
array->addControlPoint(ccp(s.width - 80, s.height - 80));
array->addControlPoint(ccp(80, s.height - 80));
array->addControlPoint(ccp(80, 80));
array->addControlPoint(ccp(s.width / 2, s.height / 2));
CCCatmullRomBy *action = CCCatmullRomBy::actionWithDuration(3, array);
CCFiniteTimeAction *reverse = action->reverse();
CCFiniteTimeAction *seq = CCSequence::actions(action, reverse, NULL);
m_tamara->runAction(seq);
//
// sprite 2 (To)
//
// The startPosition is not important here, because it uses a "To" action.
// The initial position will be the 1st point of the Catmull Rom path
//
CCPointArray *array2 = CCPointArray::arrayWithCapacity(20);
array2->addControlPoint(ccp(s.width / 2, 30));
array2->addControlPoint(ccp(s.width -80, 30));
array2->addControlPoint(ccp(s.width - 80, s.height - 80));
array2->addControlPoint(ccp(s.width / 2, s.height - 80));
array2->addControlPoint(ccp(s.width / 2, 30));
CCCatmullRomTo *action2 = CCCatmullRomTo::actionWithDuration(3, array2);
CCFiniteTimeAction *reverse2 = action2->reverse();
CCFiniteTimeAction *seq2 = CCSequence::actions(action2, reverse2, NULL);
m_kathia->runAction(seq2);
m_pArray1 = array;
m_pArray1->retain();
m_pArray2 = array2;
m_pArray2->retain();
}
ActionCatmullRom::~ActionCatmullRom()
{
m_pArray1->release();
m_pArray2->release();
}
void ActionCatmullRom::draw()
{
ActionsDemo::draw();
// move to 50,50 since the "by" path will start at 50,50
kmGLPushMatrix();
kmGLTranslatef(50, 50, 0);
ccDrawCatmullRom(m_pArray1, 50);
kmGLPopMatrix();
ccDrawCatmullRom(m_pArray2,50);
}
string ActionCatmullRom::title()
{
return "CatmullRomBy / CatmullRomTo";
}
string ActionCatmullRom::subtitle()
{
return "Catmull Rom spline paths. Testing reverse too";
}
/** ActionCardinalSpline
*/
void ActionCardinalSpline::onEnter()
{
ActionsDemo::onEnter();
this->centerSprites(2);
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCPointArray *array = CCPointArray::arrayWithCapacity(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::actionWithDuration(3, array, 0);
CCActionInterval *reverse = action->reverse();
CCFiniteTimeAction *seq = CCSequence::actions(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::actionWithDuration(3, array, 1);
CCActionInterval *reverse2 = action2->reverse();
CCFiniteTimeAction *seq2 = CCSequence::actions(action2, reverse2, NULL);
m_kathia->setPosition(ccp(s.width/2, 50));
m_kathia->runAction(seq2);
m_pArray = array;
array->retain();
}
ActionCardinalSpline::~ActionCardinalSpline()
{
m_pArray->release();
}
void ActionCardinalSpline::draw()
{
ActionsDemo::draw();
// 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();
}
string ActionCardinalSpline::title()
{
return "CardinalSplineBy / CardinalSplineAt";
}
string ActionCardinalSpline::subtitle()
{
return "Cardinal Spline paths. Testing different tensions for one array";
}
/** PauseResumeActions
*/
void PauseResumeActions::onEnter()
{
ActionsDemo::onEnter();
this->centerSprites(2);
m_tamara->runAction(CCRepeatForever::actionWithAction(CCRotateBy::actionWithDuration(3, 360)));
m_grossini->runAction(CCRepeatForever::actionWithAction(CCRotateBy::actionWithDuration(3, -360)));
m_kathia->runAction(CCRepeatForever::actionWithAction(CCRotateBy::actionWithDuration(3, 360)));
this->schedule(schedule_selector(PauseResumeActions::pause), 3, false, 0);
this->schedule(schedule_selector(PauseResumeActions::resume), 5, false, 0);
}
string PauseResumeActions::title()
{
return "PauseResumeActions";
}
string PauseResumeActions::subtitle()
{
return "All actions pause at 3s and resume at 5s";
}
void PauseResumeActions::pause(float dt)
{
CCLog("Pausing");
CCDirector *director = CCDirector::sharedDirector();
this->m_pPausedTargets = director->getActionManager()->pauseAlllRunningActions();
}
void PauseResumeActions::resume(float dt)
{
CCLog("Resuming");
CCDirector *director = CCDirector::sharedDirector();
director->getActionManager()->resumeTargets(this->m_pPausedTargets);
}

View File

@ -16,6 +16,8 @@ enum
ACTION_SKEW_LAYER,
ACTION_SKEWROTATE_LAYER,
ACTION_JUMP_LAYER,
ACTION_CARDINALSPLINE_LAYER,
ACTION_CATMULLROM_LAYER,
ACTION_BEZIER_LAYER,
ACTION_BLINK_LAYER,
ACTION_FADE_LAYER,
@ -37,6 +39,7 @@ enum
ACTION_ORBIT_LAYER,
ACTION_FLLOW_LAYER,
ACTION_TARGETED_LAYER,
PAUSERESUMEACTIONS_LAYER,
ACTION_ISSUE1305_LAYER,
ACTION_ISSUE1305_2_LAYER,
ACTION_ISSUE1288_LAYER,
@ -334,4 +337,44 @@ public:
void logSprRotation(CCNode* pSender);
};
class ActionCatmullRom : public ActionsDemo
{
public:
~ActionCatmullRom();
virtual void onEnter();
virtual void draw();
virtual std::string subtitle();
virtual std::string title();
private:
CCPointArray *m_pArray1;
CCPointArray *m_pArray2;
};
class ActionCardinalSpline : public ActionsDemo
{
public:
~ActionCardinalSpline();
virtual void onEnter();
virtual void draw();
virtual std::string subtitle();
virtual std::string title();
private:
CCPointArray *m_pArray;
};
class PauseResumeActions : public ActionsDemo
{
public:
virtual void onEnter();
virtual std::string subtitle();
virtual std::string title();
void pause(float dt);
void resume(float dt);
private:
CCSet *m_pPausedTargets;
};
#endif