2014-01-14 06:48:12 +08:00
/****************************************************************************
Copyright ( c ) 2012 cocos2d - x . org
2018-01-29 16:25:32 +08:00
Copyright ( c ) 2013 - 2016 Chukong Technologies Inc .
Copyright ( c ) 2017 - 2018 Xiamen Yaji Software Co . , Ltd .
2014-01-14 06:48:12 +08:00
http : //www.cocos2d-x.org
Permission is hereby granted , free of charge , to any person obtaining a copy
of this software and associated documentation files ( the " Software " ) , to deal
in the Software without restriction , including without limitation the rights
to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
copies of the Software , and to permit persons to whom the Software is
furnished to do so , subject to the following conditions :
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software .
THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2012-04-19 14:35:52 +08:00
# include "ActionsTest.h"
2012-06-19 16:20:46 +08:00
# include "../testResource.h"
2012-06-19 13:50:11 +08:00
# include "cocos2d.h"
2016-08-16 16:55:31 +08:00
# include "ui/CocosGUI.h"
2012-06-19 13:50:11 +08:00
2014-04-30 08:37:36 +08:00
# include "renderer/CCRenderer.h"
# include "renderer/CCCustomCommand.h"
# include "renderer/CCGroupCommand.h"
2013-12-25 09:51:55 +08:00
2015-04-09 12:23:47 +08:00
USING_NS_CC ;
2016-08-16 16:55:31 +08:00
using namespace cocos2d : : ui ;
2015-04-09 12:23:47 +08:00
2015-04-03 14:31:03 +08:00
ActionsTests : : ActionsTests ( )
{
ADD_TEST_CASE ( ActionMove ) ;
ADD_TEST_CASE ( ActionMove3D ) ;
ADD_TEST_CASE ( ActionRotate ) ;
ADD_TEST_CASE ( ActionRotateBy3D ) ;
ADD_TEST_CASE ( ActionScale ) ;
ADD_TEST_CASE ( ActionSkew ) ;
ADD_TEST_CASE ( ActionRotationalSkew ) ;
ADD_TEST_CASE ( ActionRotationalSkewVSStandardSkew ) ;
ADD_TEST_CASE ( ActionSkewRotateScale ) ;
ADD_TEST_CASE ( ActionJump ) ;
ADD_TEST_CASE ( ActionCardinalSpline ) ;
ADD_TEST_CASE ( ActionCatmullRom ) ;
ADD_TEST_CASE ( ActionBezier ) ;
ADD_TEST_CASE ( ActionBlink ) ;
ADD_TEST_CASE ( ActionFade ) ;
ADD_TEST_CASE ( ActionTint ) ;
ADD_TEST_CASE ( ActionAnimate ) ;
ADD_TEST_CASE ( ActionSequence ) ;
ADD_TEST_CASE ( ActionSequence2 ) ;
2015-12-04 04:16:21 +08:00
ADD_TEST_CASE ( ActionSequence3 ) ;
ADD_TEST_CASE ( ActionRemoveSelf ) ;
2015-04-03 14:31:03 +08:00
ADD_TEST_CASE ( ActionSpawn ) ;
2015-12-04 04:18:33 +08:00
ADD_TEST_CASE ( ActionSpawn2 ) ;
2015-04-03 14:31:03 +08:00
ADD_TEST_CASE ( ActionReverse ) ;
ADD_TEST_CASE ( ActionDelayTime ) ;
ADD_TEST_CASE ( ActionRepeat ) ;
ADD_TEST_CASE ( ActionRepeatForever ) ;
ADD_TEST_CASE ( ActionRotateToRepeat ) ;
ADD_TEST_CASE ( ActionCallFunction ) ;
ADD_TEST_CASE ( ActionCallFuncN ) ;
ADD_TEST_CASE ( ActionCallFuncND ) ;
ADD_TEST_CASE ( ActionReverseSequence ) ;
ADD_TEST_CASE ( ActionReverseSequence2 ) ;
ADD_TEST_CASE ( ActionOrbit ) ;
ADD_TEST_CASE ( ActionFollow ) ;
2016-04-20 17:25:31 +08:00
ADD_TEST_CASE ( ActionFollowWithOffset ) ;
2015-04-03 14:31:03 +08:00
ADD_TEST_CASE ( ActionTargeted ) ;
ADD_TEST_CASE ( ActionTargetedReverse ) ;
ADD_TEST_CASE ( ActionMoveStacked ) ;
ADD_TEST_CASE ( ActionMoveJumpStacked ) ;
ADD_TEST_CASE ( ActionMoveBezierStacked ) ;
ADD_TEST_CASE ( ActionCardinalSplineStacked ) ;
ADD_TEST_CASE ( ActionCatmullRomStacked ) ;
ADD_TEST_CASE ( PauseResumeActions ) ;
2016-08-16 16:55:31 +08:00
ADD_TEST_CASE ( ActionResize ) ;
2015-04-03 14:31:03 +08:00
ADD_TEST_CASE ( Issue1305 ) ;
ADD_TEST_CASE ( Issue1305_2 ) ;
ADD_TEST_CASE ( Issue1288 ) ;
ADD_TEST_CASE ( Issue1288_2 ) ;
ADD_TEST_CASE ( Issue1327 ) ;
ADD_TEST_CASE ( Issue1398 ) ;
ADD_TEST_CASE ( Issue2599 )
2015-04-28 17:48:19 +08:00
ADD_TEST_CASE ( ActionFloatTest ) ;
2017-01-17 09:48:30 +08:00
ADD_TEST_CASE ( Issue14936_1 ) ;
ADD_TEST_CASE ( Issue14936_2 ) ;
2017-07-03 09:15:53 +08:00
ADD_TEST_CASE ( SequenceWithFinalInstant ) ;
ADD_TEST_CASE ( Issue18003 ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionsDemo : : title ( ) const
2012-04-19 14:35:52 +08:00
{
return " ActionsTest " ;
}
void ActionsDemo : : onEnter ( )
{
2015-04-03 14:31:03 +08:00
TestCase : : onEnter ( ) ;
2012-04-19 14:35:52 +08:00
2019-08-20 15:15:40 +08:00
// Or you can create an sprite using a filename. only PNG is supported now.
2013-07-24 06:20:22 +08:00
_grossini = Sprite : : create ( s_pathGrossini ) ;
2013-06-15 14:03:30 +08:00
_grossini - > retain ( ) ;
2012-04-19 14:35:52 +08:00
2013-07-24 06:20:22 +08:00
_tamara = Sprite : : create ( s_pathSister1 ) ;
2013-06-15 14:03:30 +08:00
_tamara - > retain ( ) ;
2012-04-19 14:35:52 +08:00
2013-07-24 06:20:22 +08:00
_kathia = Sprite : : create ( s_pathSister2 ) ;
2013-06-15 14:03:30 +08:00
_kathia - > retain ( ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
addChild ( _grossini , 1 ) ;
addChild ( _tamara , 2 ) ;
addChild ( _kathia , 3 ) ;
2012-04-19 14:35:52 +08:00
2014-08-28 11:41:18 +08:00
_grossini - > setPosition ( VisibleRect : : center ( ) . x , VisibleRect : : bottom ( ) . y + VisibleRect : : getVisibleRect ( ) . size . height / 3 ) ;
_tamara - > setPosition ( VisibleRect : : center ( ) . x , VisibleRect : : bottom ( ) . y + VisibleRect : : getVisibleRect ( ) . size . height * 2 / 3 ) ;
_kathia - > setPosition ( VisibleRect : : center ( ) . x , VisibleRect : : bottom ( ) . y + VisibleRect : : getVisibleRect ( ) . size . height / 2 ) ;
2012-04-19 14:35:52 +08:00
}
void ActionsDemo : : onExit ( )
{
2013-06-15 14:03:30 +08:00
_grossini - > release ( ) ;
_tamara - > release ( ) ;
_kathia - > release ( ) ;
2012-04-19 14:35:52 +08:00
2015-04-03 14:31:03 +08:00
TestCase : : onExit ( ) ;
2012-04-19 14:35:52 +08:00
}
void ActionsDemo : : centerSprites ( unsigned int numberOfSprites )
{
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2012-04-19 14:35:52 +08:00
if ( numberOfSprites = = 0 )
{
2013-06-15 14:03:30 +08:00
_tamara - > setVisible ( false ) ;
_kathia - > setVisible ( false ) ;
_grossini - > setVisible ( false ) ;
2012-04-19 14:35:52 +08:00
}
else if ( numberOfSprites = = 1 )
{
2013-06-15 14:03:30 +08:00
_tamara - > setVisible ( false ) ;
_kathia - > setVisible ( false ) ;
2014-08-28 11:41:18 +08:00
_grossini - > setPosition ( s . width / 2 , s . height / 2 ) ;
2012-04-19 14:35:52 +08:00
}
else if ( numberOfSprites = = 2 )
{
2014-08-28 11:41:18 +08:00
_kathia - > setPosition ( s . width / 3 , s . height / 2 ) ;
_tamara - > setPosition ( 2 * s . width / 3 , s . height / 2 ) ;
2013-06-15 14:03:30 +08:00
_grossini - > setVisible ( false ) ;
2012-04-19 14:35:52 +08:00
}
else if ( numberOfSprites = = 3 )
{
2014-08-28 11:41:18 +08:00
_grossini - > setPosition ( s . width / 2 , s . height / 2 ) ;
_tamara - > setPosition ( s . width / 4 , s . height / 2 ) ;
_kathia - > setPosition ( 3 * s . width / 4 , s . height / 2 ) ;
2012-04-19 14:35:52 +08:00
}
}
void ActionsDemo : : alignSpritesLeft ( unsigned int numberOfSprites )
{
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2012-04-19 14:35:52 +08:00
if ( numberOfSprites = = 1 )
{
2013-06-15 14:03:30 +08:00
_tamara - > setVisible ( false ) ;
_kathia - > setVisible ( false ) ;
2014-08-28 11:41:18 +08:00
_grossini - > setPosition ( 60 , s . height / 2 ) ;
2012-04-19 14:35:52 +08:00
}
else if ( numberOfSprites = = 2 )
{
2014-08-28 11:41:18 +08:00
_kathia - > setPosition ( 60 , s . height / 3 ) ;
_tamara - > setPosition ( 60 , 2 * s . height / 3 ) ;
2013-06-15 14:03:30 +08:00
_grossini - > setVisible ( false ) ;
2012-04-19 14:35:52 +08:00
}
else if ( numberOfSprites = = 3 )
{
2014-08-28 11:41:18 +08:00
_grossini - > setPosition ( 60 , s . height / 2 ) ;
_tamara - > setPosition ( 60 , 2 * s . height / 3 ) ;
_kathia - > setPosition ( 60 , s . height / 3 ) ;
2012-04-19 14:35:52 +08:00
}
}
//------------------------------------------------------------------
//
// ActionMove
//
//------------------------------------------------------------------
void ActionMove : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2012-04-19 14:35:52 +08:00
2014-05-15 01:07:09 +08:00
auto actionTo = MoveTo : : create ( 2 , Vec2 ( s . width - 40 , s . height - 40 ) ) ;
2019-09-24 11:31:35 +08:00
auto actionBy = MoveBy : : create ( 2 , Vec2 ( 80.0f , 80.0f ) ) ;
2013-06-22 03:25:36 +08:00
auto actionByBack = actionBy - > reverse ( ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( actionTo ) ;
2014-07-10 00:45:27 +08:00
_grossini - > runAction ( Sequence : : create ( actionBy , actionByBack , nullptr ) ) ;
2019-09-24 11:31:35 +08:00
_kathia - > runAction ( MoveTo : : create ( 1 , Vec2 ( 40.0f , 40.0f ) ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionMove : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " MoveTo / MoveBy " ;
}
2014-12-22 14:34:35 +08:00
//------------------------------------------------------------------
//
// ActionMove3D
//
//------------------------------------------------------------------
void ActionMove3D : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2019-09-24 11:31:35 +08:00
_tamara - > setPosition3D ( Vec3 ( s . width - 40 , s . height - 40 , 0.0f ) ) ;
_kathia - > setPosition3D ( Vec3 ( 40.0f , 40.0f , 0.0f ) ) ;
2014-12-22 14:34:35 +08:00
2019-09-24 11:31:35 +08:00
auto actionTo = MoveTo : : create ( 2 , Vec3 ( s . width - 40 , s . height - 40 , - 100.0f ) ) ;
auto actionBy = MoveBy : : create ( 2 , Vec3 ( 80.0f , 80.0f , - 100.0f ) ) ;
2014-12-22 14:34:35 +08:00
auto actionByBack = actionBy - > reverse ( ) ;
_tamara - > runAction ( actionTo ) ;
_grossini - > runAction ( Sequence : : create ( actionBy , actionByBack , nullptr ) ) ;
2019-09-24 11:31:35 +08:00
_kathia - > runAction ( MoveTo : : create ( 1 , Vec3 ( 40.0f , 40.0f , - 100.0f ) ) ) ;
2014-12-22 14:34:35 +08:00
}
std : : string ActionMove3D : : subtitle ( ) const
{
return " MoveTo / MoveBy 3D " ;
}
2012-04-19 14:35:52 +08:00
//------------------------------------------------------------------
//
// ActionScale
//
//------------------------------------------------------------------
void ActionScale : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
2013-06-22 03:25:36 +08:00
auto actionTo = ScaleTo : : create ( 2.0f , 0.5f ) ;
auto actionBy = ScaleBy : : create ( 2.0f , 1.0f , 10.0f ) ;
auto actionBy2 = ScaleBy : : create ( 2.0f , 5.0f , 1.0f ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( actionTo ) ;
2014-07-10 00:45:27 +08:00
_tamara - > runAction ( Sequence : : create ( actionBy , actionBy - > reverse ( ) , nullptr ) ) ;
_kathia - > runAction ( Sequence : : create ( actionBy2 , actionBy2 - > reverse ( ) , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionScale : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " ScaleTo / ScaleBy " ;
}
//------------------------------------------------------------------
//
// ActionSkew
//
//------------------------------------------------------------------
void ActionSkew : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
2013-06-22 03:25:36 +08:00
auto actionTo = SkewTo : : create ( 2 , 37.2f , - 37.2f ) ;
auto actionToBack = SkewTo : : create ( 2 , 0 , 0 ) ;
auto actionBy = SkewBy : : create ( 2 , 0.0f , - 90.0f ) ;
auto actionBy2 = SkewBy : : create ( 2 , 45.0f , 45.0f ) ;
auto actionByBack = actionBy - > reverse ( ) ;
2012-04-19 14:35:52 +08:00
2014-07-10 00:45:27 +08:00
_tamara - > runAction ( Sequence : : create ( actionTo , actionToBack , nullptr ) ) ;
_grossini - > runAction ( Sequence : : create ( actionBy , actionByBack , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
2014-07-10 00:45:27 +08:00
_kathia - > runAction ( Sequence : : create ( actionBy2 , actionBy2 - > reverse ( ) , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionSkew : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " SkewTo / SkewBy " ;
}
2013-02-28 14:42:45 +08:00
// ActionRotationalSkew
void ActionRotationalSkew : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
this - > centerSprites ( 3 ) ;
2013-12-21 11:37:14 +08:00
auto actionTo = RotateTo : : create ( 2 , 180 , 180 ) ;
2013-06-22 03:25:36 +08:00
auto actionToBack = RotateTo : : create ( 2 , 0 , 0 ) ;
2013-12-21 11:37:14 +08:00
auto actionBy = RotateBy : : create ( 2 , 0.0f , 360 ) ;
2013-06-22 03:25:36 +08:00
auto actionByBack = actionBy - > reverse ( ) ;
2013-02-28 14:42:45 +08:00
2013-12-21 11:37:14 +08:00
auto actionBy2 = RotateBy : : create ( 2 , 360 , 0 ) ;
auto actionBy2Back = actionBy2 - > reverse ( ) ;
2013-02-28 14:42:45 +08:00
2014-07-10 00:45:27 +08:00
_tamara - > runAction ( Sequence : : create ( actionBy , actionByBack , nullptr ) ) ;
_grossini - > runAction ( Sequence : : create ( actionTo , actionToBack , nullptr ) ) ;
_kathia - > runAction ( Sequence : : create ( actionBy2 , actionBy2Back , nullptr ) ) ;
2013-02-28 14:42:45 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionRotationalSkew : : subtitle ( ) const
2013-02-28 14:42:45 +08:00
{
return " RotationalSkewTo / RotationalSkewBy " ;
}
//ActionRotationalSkewVSStandardSkew
void ActionRotationalSkewVSStandardSkew : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
2013-06-15 14:03:30 +08:00
_tamara - > removeFromParentAndCleanup ( true ) ;
_grossini - > removeFromParentAndCleanup ( true ) ;
_kathia - > removeFromParentAndCleanup ( true ) ;
2013-02-28 14:42:45 +08:00
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2013-02-28 14:42:45 +08:00
2013-06-22 03:25:36 +08:00
Size boxSize ( 100.0f , 100.0f ) ;
2013-02-28 14:42:45 +08:00
2013-07-05 16:49:22 +08:00
auto box = LayerColor : : create ( Color4B ( 255 , 255 , 0 , 255 ) ) ;
2019-09-24 11:31:35 +08:00
box - > setAnchorPoint ( Vec2 ( 0.5f , 0.5f ) ) ;
2013-02-28 14:42:45 +08:00
box - > setContentSize ( boxSize ) ;
2016-04-25 19:43:42 +08:00
box - > setIgnoreAnchorPointForPosition ( false ) ;
2014-08-28 11:41:18 +08:00
box - > setPosition ( s . width / 2 , s . height - 100 - box - > getContentSize ( ) . height / 2 ) ;
2013-02-28 14:42:45 +08:00
this - > addChild ( box ) ;
2013-06-22 03:25:36 +08:00
2019-06-27 13:41:41 +08:00
auto label = Label : : createWithTTF ( " Standard cocos2d Skew " , " fonts/Marker Felt.ttf " , 16.0f ) ;
label - > setPosition ( s . width / 2 , s . height - 100 + label - > getContentSize ( ) . height ) ;
this - > addChild ( label ) ;
2013-06-22 03:25:36 +08:00
auto actionTo = SkewBy : : create ( 2 , 360 , 0 ) ;
auto actionToBack = SkewBy : : create ( 2 , - 360 , 0 ) ;
2013-02-28 14:42:45 +08:00
2014-07-10 00:45:27 +08:00
box - > runAction ( Sequence : : create ( actionTo , actionToBack , nullptr ) ) ;
2013-02-28 14:42:45 +08:00
2013-07-05 16:49:22 +08:00
box = LayerColor : : create ( Color4B ( 255 , 255 , 0 , 255 ) ) ;
2019-09-24 11:31:35 +08:00
box - > setAnchorPoint ( Vec2 ( 0.5f , 0.5f ) ) ;
2013-02-28 14:42:45 +08:00
box - > setContentSize ( boxSize ) ;
2016-04-25 19:43:42 +08:00
box - > setIgnoreAnchorPointForPosition ( false ) ;
2014-08-28 11:41:18 +08:00
box - > setPosition ( s . width / 2 , s . height - 250 - box - > getContentSize ( ) . height / 2 ) ;
2013-02-28 14:42:45 +08:00
this - > addChild ( box ) ;
2013-06-22 03:25:36 +08:00
2019-06-27 13:41:41 +08:00
label = Label : : createWithTTF ( " Rotational Skew " , " fonts/Marker Felt.ttf " , 16.0f ) ;
label - > setPosition ( s . width / 2 , s . height - 250 + label - > getContentSize ( ) . height / 2 ) ;
this - > addChild ( label ) ;
2013-06-22 03:25:36 +08:00
auto actionTo2 = RotateBy : : create ( 2 , 360 , 0 ) ;
auto actionToBack2 = RotateBy : : create ( 2 , - 360 , 0 ) ;
2014-07-10 00:45:27 +08:00
box - > runAction ( Sequence : : create ( actionTo2 , actionToBack2 , nullptr ) ) ;
2013-02-28 14:42:45 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionRotationalSkewVSStandardSkew : : subtitle ( ) const
2013-02-28 14:42:45 +08:00
{
return " Skew Comparison " ;
}
2012-11-19 17:15:16 +08:00
// ActionSkewRotateScale
2012-04-19 14:35:52 +08:00
void ActionSkewRotateScale : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
2013-06-15 14:03:30 +08:00
_tamara - > removeFromParentAndCleanup ( true ) ;
_grossini - > removeFromParentAndCleanup ( true ) ;
_kathia - > removeFromParentAndCleanup ( true ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
Size boxSize ( 100.0f , 100.0f ) ;
2012-04-19 14:35:52 +08:00
2013-07-05 16:49:22 +08:00
auto box = LayerColor : : create ( Color4B ( 255 , 255 , 0 , 255 ) ) ;
2019-09-24 11:31:35 +08:00
box - > setAnchorPoint ( Vec2 ( 0.0f , 0.0f ) ) ;
2014-08-28 11:41:18 +08:00
box - > setPosition ( 190 , 110 ) ;
2012-04-19 14:35:52 +08:00
box - > setContentSize ( boxSize ) ;
static float markrside = 10.0f ;
2013-07-05 16:49:22 +08:00
auto uL = LayerColor : : create ( Color4B ( 255 , 0 , 0 , 255 ) ) ;
2012-04-19 14:35:52 +08:00
box - > addChild ( uL ) ;
2013-07-12 14:30:26 +08:00
uL - > setContentSize ( Size ( markrside , markrside ) ) ;
2014-08-28 11:41:18 +08:00
uL - > setPosition ( 0.f , boxSize . height - markrside ) ;
2019-09-24 11:31:35 +08:00
uL - > setAnchorPoint ( Vec2 ( 0.0f , 0.0f ) ) ;
2012-04-19 14:35:52 +08:00
2013-07-05 16:49:22 +08:00
auto uR = LayerColor : : create ( Color4B ( 0 , 0 , 255 , 255 ) ) ;
2012-04-19 14:35:52 +08:00
box - > addChild ( uR ) ;
2013-07-12 14:30:26 +08:00
uR - > setContentSize ( Size ( markrside , markrside ) ) ;
2014-08-28 11:41:18 +08:00
uR - > setPosition ( boxSize . width - markrside , boxSize . height - markrside ) ;
2019-09-24 11:31:35 +08:00
uR - > setAnchorPoint ( Vec2 ( 0.0f , 0.0f ) ) ;
2012-04-19 14:35:52 +08:00
addChild ( box ) ;
2013-06-22 03:25:36 +08:00
auto actionTo = SkewTo : : create ( 2 , 0.f , 2.f ) ;
auto rotateTo = RotateTo : : create ( 2 , 61.0f ) ;
auto actionScaleTo = ScaleTo : : create ( 2 , - 0.44f , 0.47f ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto actionScaleToBack = ScaleTo : : create ( 2 , 1.0f , 1.0f ) ;
auto rotateToBack = RotateTo : : create ( 2 , 0 ) ;
auto actionToBack = SkewTo : : create ( 2 , 0 , 0 ) ;
2012-04-19 14:35:52 +08:00
2014-07-10 00:45:27 +08:00
box - > runAction ( Sequence : : create ( actionTo , actionToBack , nullptr ) ) ;
box - > runAction ( Sequence : : create ( rotateTo , rotateToBack , nullptr ) ) ;
box - > runAction ( Sequence : : create ( actionScaleTo , actionScaleToBack , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionSkewRotateScale : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Skew + Rotate + Scale " ;
}
//------------------------------------------------------------------
//
// ActionRotate
//
//------------------------------------------------------------------
void ActionRotate : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
2013-06-22 03:25:36 +08:00
auto actionTo = RotateTo : : create ( 2 , 45 ) ;
auto actionTo2 = RotateTo : : create ( 2 , - 45 ) ;
auto actionTo0 = RotateTo : : create ( 2 , 0 ) ;
2014-07-10 00:45:27 +08:00
_tamara - > runAction ( Sequence : : create ( actionTo , actionTo0 , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto actionBy = RotateBy : : create ( 2 , 360 ) ;
auto actionByBack = actionBy - > reverse ( ) ;
2014-07-10 00:45:27 +08:00
_grossini - > runAction ( Sequence : : create ( actionBy , actionByBack , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
2014-07-10 00:45:27 +08:00
_kathia - > runAction ( Sequence : : create ( actionTo2 , actionTo0 - > clone ( ) , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionRotate : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " RotateTo / RotateBy " ;
}
2014-02-23 11:16:42 +08:00
//------------------------------------------------------------------
//
// ActionRotateBy3D
//
//------------------------------------------------------------------
void ActionRotateBy3D : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
2019-09-24 11:31:35 +08:00
auto actionBy1 = RotateBy : : create ( 4 , Vec3 ( 360.0f , 0.0f , 0.0f ) ) ;
auto actionBy2 = RotateBy : : create ( 4 , Vec3 ( 0.0f , 360.0f , 0.0f ) ) ;
auto actionBy3 = RotateBy : : create ( 4 , Vec3 ( 0.0f , 0.0f , 360.0f ) ) ;
2014-02-23 11:16:42 +08:00
2014-03-25 06:09:24 +08:00
_tamara - > runAction ( Sequence : : create ( actionBy1 , actionBy1 - > reverse ( ) , nullptr ) ) ;
_grossini - > runAction ( Sequence : : create ( actionBy2 , actionBy2 - > reverse ( ) , nullptr ) ) ;
_kathia - > runAction ( Sequence : : create ( actionBy3 , actionBy3 - > reverse ( ) , nullptr ) ) ;
2014-02-23 11:16:42 +08:00
}
std : : string ActionRotateBy3D : : subtitle ( ) const
{
return " RotateBy in 3D " ;
}
2012-04-19 14:35:52 +08:00
//------------------------------------------------------------------
//
// ActionJump
//
//------------------------------------------------------------------
void ActionJump : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
2014-05-15 01:07:09 +08:00
auto actionTo = JumpTo : : create ( 2 , Vec2 ( 300 , 300 ) , 50 , 4 ) ;
auto actionBy = JumpBy : : create ( 2 , Vec2 ( 300 , 0 ) , 50 , 4 ) ;
auto actionUp = JumpBy : : create ( 2 , Vec2 ( 0 , 0 ) , 80 , 4 ) ;
2013-06-22 03:25:36 +08:00
auto actionByBack = actionBy - > reverse ( ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( actionTo ) ;
2014-07-10 00:45:27 +08:00
_grossini - > runAction ( Sequence : : create ( actionBy , actionByBack , nullptr ) ) ;
2013-06-20 14:17:10 +08:00
_kathia - > runAction ( RepeatForever : : create ( actionUp ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionJump : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " JumpTo / JumpBy " ;
}
//------------------------------------------------------------------
//
// ActionBezier
//
//------------------------------------------------------------------
void ActionBezier : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2012-04-19 14:35:52 +08:00
//
// startPosition can be any coordinate, but since the movement
// is relative to the Bezier curve, make it (0,0)
//
centerSprites ( 3 ) ;
// sprite 1
ccBezierConfig bezier ;
2019-09-24 11:31:35 +08:00
bezier . controlPoint_1 = Vec2 ( 0.0f , s . height / 2 ) ;
bezier . controlPoint_2 = Vec2 ( 300.0f , - s . height / 2 ) ;
bezier . endPosition = Vec2 ( 300.0f , 100.0f ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto bezierForward = BezierBy : : create ( 3 , bezier ) ;
auto bezierBack = bezierForward - > reverse ( ) ;
2014-07-10 00:45:27 +08:00
auto rep = RepeatForever : : create ( Sequence : : create ( bezierForward , bezierBack , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
// sprite 2
2014-08-28 11:41:18 +08:00
_tamara - > setPosition ( 80 , 160 ) ;
2013-06-22 03:25:36 +08:00
ccBezierConfig bezier2 ;
2019-09-24 11:31:35 +08:00
bezier2 . controlPoint_1 = Vec2 ( 100.0f , s . height / 2 ) ;
bezier2 . controlPoint_2 = Vec2 ( 200.0f , - s . height / 2 ) ;
bezier2 . endPosition = Vec2 ( 240.0f , 160.0f ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto bezierTo1 = BezierTo : : create ( 2 , bezier2 ) ;
2012-04-19 14:35:52 +08:00
// sprite 3
2014-08-28 11:41:18 +08:00
_kathia - > setPosition ( 400 , 160 ) ;
2013-06-22 03:25:36 +08:00
auto bezierTo2 = BezierTo : : create ( 2 , bezier2 ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( rep ) ;
_tamara - > runAction ( bezierTo1 ) ;
_kathia - > runAction ( bezierTo2 ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionBezier : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " BezierBy / BezierTo " ;
}
//------------------------------------------------------------------
//
// ActionBlink
//
//------------------------------------------------------------------
void ActionBlink : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 2 ) ;
2013-06-22 03:25:36 +08:00
auto action1 = Blink : : create ( 2 , 10 ) ;
auto action2 = Blink : : create ( 2 , 5 ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( action1 ) ;
_kathia - > runAction ( action2 ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionBlink : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Blink " ;
}
//------------------------------------------------------------------
//
// ActionFade
//
//------------------------------------------------------------------
void ActionFade : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 2 ) ;
2013-06-15 14:03:30 +08:00
_tamara - > setOpacity ( 0 ) ;
2013-06-22 03:25:36 +08:00
auto action1 = FadeIn : : create ( 1.0f ) ;
auto action1Back = action1 - > reverse ( ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto action2 = FadeOut : : create ( 1.0f ) ;
auto action2Back = action2 - > reverse ( ) ;
2014-02-25 15:30:54 +08:00
auto action2BackReverse = action2Back - > reverse ( ) ;
auto action2BackReverseReverse = action2BackReverse - > reverse ( ) ;
2012-04-19 14:35:52 +08:00
2014-02-25 15:30:54 +08:00
_tamara - > setOpacity ( 122 ) ;
2014-07-10 00:45:27 +08:00
_tamara - > runAction ( Sequence : : create ( action1 , action1Back , nullptr ) ) ;
2014-02-25 15:30:54 +08:00
_kathia - > setOpacity ( 122 ) ;
2014-07-10 00:45:27 +08:00
_kathia - > runAction ( Sequence : : create ( action2 , action2Back , action2BackReverse , action2BackReverseReverse , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionFade : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " FadeIn / FadeOut " ;
}
//------------------------------------------------------------------
//
// ActionTint
//
//------------------------------------------------------------------
void ActionTint : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 2 ) ;
2013-06-22 03:25:36 +08:00
auto action1 = TintTo : : create ( 2 , 255 , 0 , 255 ) ;
auto action2 = TintBy : : create ( 2 , - 127 , - 255 , - 127 ) ;
auto action2Back = action2 - > reverse ( ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( action1 ) ;
2014-07-10 00:45:27 +08:00
_kathia - > runAction ( Sequence : : create ( action2 , action2Back , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionTint : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " TintTo / TintBy " ;
}
//------------------------------------------------------------------
//
// ActionAnimate
//
//------------------------------------------------------------------
void ActionAnimate : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
//
// Manual animation
//
2013-08-16 16:05:27 +08:00
auto animation = Animation : : create ( ) ;
2012-04-19 14:35:52 +08:00
for ( int i = 1 ; i < 15 ; i + + )
{
char szName [ 100 ] = { 0 } ;
sprintf ( szName , " Images/grossini_dance_%02d.png " , i ) ;
2013-09-16 20:38:03 +08:00
animation - > addSpriteFrameWithFile ( szName ) ;
2012-04-19 14:35:52 +08:00
}
// should last 2.8 seconds. And there are 14 frames.
animation - > setDelayPerUnit ( 2.8f / 14.0f ) ;
animation - > setRestoreOriginalFrame ( true ) ;
2013-08-16 16:05:27 +08:00
auto action = Animate : : create ( animation ) ;
2014-07-10 00:45:27 +08:00
_grossini - > runAction ( Sequence : : create ( action , action - > reverse ( ) , nullptr ) ) ;
2012-07-23 22:49:11 +08:00
2012-04-19 14:35:52 +08:00
//
// File animation
//
// With 2 loops and reverse
2013-08-16 16:05:27 +08:00
auto cache = AnimationCache : : getInstance ( ) ;
2012-04-19 14:35:52 +08:00
cache - > addAnimationsWithFile ( " animations/animations-2.plist " ) ;
2013-09-16 20:38:03 +08:00
auto animation2 = cache - > getAnimation ( " dance_1 " ) ;
2012-04-19 14:35:52 +08:00
2013-08-16 16:05:27 +08:00
auto action2 = Animate : : create ( animation2 ) ;
2014-07-10 00:45:27 +08:00
_tamara - > runAction ( Sequence : : create ( action2 , action2 - > reverse ( ) , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
2014-05-13 17:08:52 +08:00
_frameDisplayedListener = EventListenerCustom : : create ( AnimationFrameDisplayedNotification , [ ] ( EventCustom * event ) {
2014-05-13 17:30:48 +08:00
auto userData = static_cast < AnimationFrame : : DisplayedEventInfo * > ( event - > getUserData ( ) ) ;
2014-05-13 17:08:52 +08:00
log ( " target %p with data %s " , userData - > target , Value ( userData - > userInfo ) . getDescription ( ) . c_str ( ) ) ;
} ) ;
2012-04-19 14:35:52 +08:00
2014-05-13 17:08:52 +08:00
_eventDispatcher - > addEventListenerWithFixedPriority ( _frameDisplayedListener , - 1 ) ;
2012-04-19 14:35:52 +08:00
//
// File animation
//
// with 4 loops
2013-08-16 16:05:27 +08:00
auto animation3 = animation2 - > clone ( ) ;
2012-04-19 14:35:52 +08:00
animation3 - > setLoops ( 4 ) ;
2013-08-16 16:05:27 +08:00
auto action3 = Animate : : create ( animation3 ) ;
2013-06-15 14:03:30 +08:00
_kathia - > runAction ( action3 ) ;
2012-04-19 14:35:52 +08:00
}
void ActionAnimate : : onExit ( )
{
ActionsDemo : : onExit ( ) ;
2014-05-13 17:08:52 +08:00
_eventDispatcher - > removeEventListener ( _frameDisplayedListener ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionAnimate : : title ( ) const
2012-04-19 14:35:52 +08:00
{
return " Animation " ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionAnimate : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Center: Manual animation. Border: using file format animation " ;
}
//------------------------------------------------------------------
//
// ActionSequence
//
//------------------------------------------------------------------
void ActionSequence : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 1 ) ;
2013-06-22 03:25:36 +08:00
auto action = Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 2 , Vec2 ( 240.0f , 0.0f ) ) ,
2013-06-20 14:17:10 +08:00
RotateBy : : create ( 2 , 540 ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionSequence : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Sequence: Move + Rotate " ;
}
//------------------------------------------------------------------
//
// ActionSequence2
//
//------------------------------------------------------------------
void ActionSequence2 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 1 ) ;
2013-06-15 14:03:30 +08:00
_grossini - > setVisible ( false ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto action = Sequence : : create (
2019-09-24 11:31:35 +08:00
Place : : create ( Vec2 ( 200.0f , 200.0f ) ) ,
2013-06-20 14:17:10 +08:00
Show : : create ( ) ,
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 1 , Vec2 ( 100.0f , 0.0f ) ) ,
2013-06-20 14:17:10 +08:00
CallFunc : : create ( CC_CALLBACK_0 ( ActionSequence2 : : callback1 , this ) ) ,
CallFunc : : create ( CC_CALLBACK_0 ( ActionSequence2 : : callback2 , this , _grossini ) ) ,
2013-06-22 05:58:52 +08:00
CallFunc : : create ( CC_CALLBACK_0 ( ActionSequence2 : : callback3 , this , _grossini , 0xbebabeba ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
}
void ActionSequence2 : : callback1 ( )
{
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2014-04-09 23:31:05 +08:00
auto label = Label : : createWithTTF ( " callback 1 called " , " fonts/Marker Felt.ttf " , 16.0f ) ;
2014-08-28 11:41:18 +08:00
label - > setPosition ( s . width / 4 * 1 , s . height / 2 ) ;
2012-04-19 14:35:52 +08:00
addChild ( label ) ;
}
2013-06-20 14:17:10 +08:00
void ActionSequence2 : : callback2 ( Node * sender )
2012-04-19 14:35:52 +08:00
{
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2014-04-09 23:31:05 +08:00
auto label = Label : : createWithTTF ( " callback 2 called " , " fonts/Marker Felt.ttf " , 16.0f ) ;
2014-08-28 11:41:18 +08:00
label - > setPosition ( s . width / 4 * 2 , s . height / 2 ) ;
2012-04-19 14:35:52 +08:00
addChild ( label ) ;
}
2013-06-22 05:58:52 +08:00
void ActionSequence2 : : callback3 ( Node * sender , long data )
2012-04-19 14:35:52 +08:00
{
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2014-04-09 23:31:05 +08:00
auto label = Label : : createWithTTF ( " callback 3 called " , " fonts/Marker Felt.ttf " , 16.0f ) ;
2014-08-28 11:41:18 +08:00
label - > setPosition ( s . width / 4 * 3 , s . height / 2 ) ;
2012-04-19 14:35:52 +08:00
addChild ( label ) ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionSequence2 : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Sequence of InstantActions " ;
}
2015-12-04 04:16:21 +08:00
//------------------------------------------------------------------
//
// ActionSequence3
//
//------------------------------------------------------------------
void ActionSequence3 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 1 ) ;
// Uses Array API
2019-09-24 11:31:35 +08:00
auto action1 = MoveBy : : create ( 2 , Vec2 ( 240.0f , 0.0f ) ) ;
2015-12-04 04:16:21 +08:00
auto action2 = RotateBy : : create ( 2 , 540 ) ;
auto action3 = action1 - > reverse ( ) ;
auto action4 = action2 - > reverse ( ) ;
Vector < FiniteTimeAction * > array ;
array . pushBack ( action1 ) ;
array . pushBack ( action2 ) ;
array . pushBack ( action3 ) ;
array . pushBack ( action4 ) ;
auto action = Sequence : : create ( array ) ;
_grossini - > runAction ( action ) ;
}
std : : string ActionSequence3 : : subtitle ( ) const
{
return " Sequence: Using Array API " ;
}
2012-04-19 14:35:52 +08:00
//------------------------------------------------------------------
//
2013-06-22 05:58:52 +08:00
// ActionCallFuncN
2012-04-19 14:35:52 +08:00
//
//------------------------------------------------------------------
2013-06-22 05:58:52 +08:00
void ActionCallFuncN : : onEnter ( )
2012-04-19 14:35:52 +08:00
{
ActionsDemo : : onEnter ( ) ;
2013-06-22 05:58:52 +08:00
centerSprites ( 1 ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto action = Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 2.0f , Vec2 ( 150.0f , 0.0f ) ) ,
2013-06-22 05:58:52 +08:00
CallFuncN : : create ( CC_CALLBACK_1 ( ActionCallFuncN : : callback , this ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionCallFuncN : : title ( ) const
2012-04-19 14:35:52 +08:00
{
2013-06-22 05:58:52 +08:00
return " CallFuncN " ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionCallFuncN : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
2013-06-22 05:58:52 +08:00
return " Grossini should jump after moving " ;
2012-04-19 14:35:52 +08:00
}
2013-06-22 05:58:52 +08:00
void ActionCallFuncN : : callback ( Node * sender )
2012-04-19 14:35:52 +08:00
{
2014-05-15 01:07:09 +08:00
auto a = JumpBy : : create ( 5 , Vec2 ( 0 , 0 ) , 100 , 5 ) ;
2013-06-22 05:58:52 +08:00
sender - > runAction ( a ) ;
2012-04-19 14:35:52 +08:00
}
//------------------------------------------------------------------
//
// ActionCallFuncND
2013-06-22 05:58:52 +08:00
// CallFuncND is no longer needed. It can simulated with std::bind()
2012-04-19 14:35:52 +08:00
//
//------------------------------------------------------------------
void ActionCallFuncND : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 1 ) ;
2013-06-22 05:58:52 +08:00
auto action = Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 2.0f , Vec2 ( 200.0f , 0.0f ) ) ,
2013-07-17 16:25:13 +08:00
CallFuncN : : create ( CC_CALLBACK_1 ( ActionCallFuncND : : doRemoveFromParentAndCleanup , this , true ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionCallFuncND : : title ( ) const
2012-04-19 14:35:52 +08:00
{
return " CallFuncND + auto remove " ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionCallFuncND : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
2013-06-22 05:58:52 +08:00
return " simulates CallFuncND with std::bind() " ;
}
2013-07-26 06:53:24 +08:00
void ActionCallFuncND : : doRemoveFromParentAndCleanup ( Node * sender , bool cleanup )
2013-06-22 05:58:52 +08:00
{
_grossini - > removeFromParentAndCleanup ( cleanup ) ;
}
2013-06-04 03:13:24 +08:00
//------------------------------------------------------------------
//
// ActionCallFunction
//
//------------------------------------------------------------------
void ActionCallFunction : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
2013-06-22 03:25:36 +08:00
auto action1 = Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 2 , Vec2 ( 200.0f , 0.0f ) ) ,
2013-06-22 03:25:36 +08:00
CallFunc : : create ( std : : bind ( & ActionCallFunction : : callback1 , this ) ) ,
CallFunc : : create (
// lambda
[ & ] ( ) {
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2014-04-09 23:31:05 +08:00
auto label = Label : : createWithTTF ( " called:lambda callback " , " fonts/Marker Felt.ttf " , 16.0f ) ;
2014-08-28 11:41:18 +08:00
label - > setPosition ( s . width / 4 * 1 , s . height / 2 - 40 ) ;
2013-06-22 03:25:36 +08:00
this - > addChild ( label ) ;
} ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2013-06-22 03:25:36 +08:00
auto action2 = Sequence : : create (
ScaleBy : : create ( 2 , 2 ) ,
FadeOut : : create ( 2 ) ,
CallFunc : : create ( std : : bind ( & ActionCallFunction : : callback2 , this , _tamara ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2013-06-22 03:25:36 +08:00
auto action3 = Sequence : : create (
RotateBy : : create ( 3 , 360 ) ,
FadeOut : : create ( 2 ) ,
2013-06-22 05:58:52 +08:00
CallFunc : : create ( std : : bind ( & ActionCallFunction : : callback3 , this , _kathia , 42 ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2013-06-04 03:13:24 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action1 ) ;
_tamara - > runAction ( action2 ) ;
_kathia - > runAction ( action3 ) ;
2013-06-04 03:13:24 +08:00
}
void ActionCallFunction : : callback1 ( )
{
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2014-04-09 23:31:05 +08:00
auto label = Label : : createWithTTF ( " callback 1 called " , " fonts/Marker Felt.ttf " , 16.0f ) ;
2014-08-28 11:41:18 +08:00
label - > setPosition ( s . width / 4 * 1 , s . height / 2 ) ;
2013-06-04 03:13:24 +08:00
addChild ( label ) ;
}
2013-06-20 14:17:10 +08:00
void ActionCallFunction : : callback2 ( Node * sender )
2013-06-04 03:13:24 +08:00
{
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2014-04-09 23:31:05 +08:00
auto label = Label : : createWithTTF ( " callback 2 called " , " fonts/Marker Felt.ttf " , 16.0f ) ;
2014-08-28 11:41:18 +08:00
label - > setPosition ( s . width / 4 * 2 , s . height / 2 ) ;
2013-06-04 03:13:24 +08:00
addChild ( label ) ;
CCLOG ( " sender is: %p " , sender ) ;
}
2013-06-22 05:58:52 +08:00
void ActionCallFunction : : callback3 ( Node * sender , long data )
2013-06-04 03:13:24 +08:00
{
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2014-04-09 23:31:05 +08:00
auto label = Label : : createWithTTF ( " callback 3 called " , " fonts/Marker Felt.ttf " , 16.0f ) ;
2014-08-28 11:41:18 +08:00
label - > setPosition ( s . width / 4 * 3 , s . height / 2 ) ;
2013-06-04 03:13:24 +08:00
addChild ( label ) ;
2013-06-22 05:58:52 +08:00
CCLOG ( " target is: %p, data is: %ld " , sender , data ) ;
2013-06-04 03:13:24 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionCallFunction : : subtitle ( ) const
2013-06-04 03:13:24 +08:00
{
return " Callbacks: CallFunc with std::function() " ;
}
2012-04-19 14:35:52 +08:00
//------------------------------------------------------------------
//
// ActionSpawn
//
//------------------------------------------------------------------
void ActionSpawn : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 1 ) ;
2013-06-22 03:25:36 +08:00
auto action = Spawn : : create (
2014-05-15 01:07:09 +08:00
JumpBy : : create ( 2 , Vec2 ( 300 , 0 ) , 50 , 4 ) ,
2013-06-20 14:17:10 +08:00
RotateBy : : create ( 2 , 720 ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionSpawn : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Spawn: Jump + Rotate " ;
}
2015-12-04 04:16:21 +08:00
//------------------------------------------------------------------
//
// ActionSpawn2
//
//------------------------------------------------------------------
void ActionSpawn2 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 1 ) ;
auto action1 = JumpBy : : create ( 2 , Vec2 ( 300 , 0 ) , 50 , 4 ) ;
auto action2 = RotateBy : : create ( 2 , 720 ) ;
Vector < FiniteTimeAction * > array ;
array . pushBack ( action1 ) ;
array . pushBack ( action2 ) ;
auto action = Spawn : : create ( array ) ;
_grossini - > runAction ( action ) ;
}
std : : string ActionSpawn2 : : subtitle ( ) const
{
return " Spawn: using the Array API " ;
}
2012-04-19 14:35:52 +08:00
//------------------------------------------------------------------
//
// ActionRepeatForever
//
//------------------------------------------------------------------
void ActionRepeatForever : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 1 ) ;
2013-06-22 03:25:36 +08:00
auto action = Sequence : : create (
2013-06-20 14:17:10 +08:00
DelayTime : : create ( 1 ) ,
CallFunc : : create ( std : : bind ( & ActionRepeatForever : : repeatForever , this , _grossini ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
}
2013-07-26 06:53:24 +08:00
void ActionRepeatForever : : repeatForever ( Node * sender )
2012-04-19 14:35:52 +08:00
{
2013-06-22 03:25:36 +08:00
auto repeat = RepeatForever : : create ( RotateBy : : create ( 1.0f , 360 ) ) ;
2012-04-19 14:35:52 +08:00
2013-07-26 06:53:24 +08:00
sender - > runAction ( repeat ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionRepeatForever : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " CallFuncN + RepeatForever " ;
}
//------------------------------------------------------------------
//
// ActionRotateToRepeat
//
//------------------------------------------------------------------
void ActionRotateToRepeat : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 2 ) ;
2013-06-22 03:25:36 +08:00
auto act1 = RotateTo : : create ( 1 , 90 ) ;
auto act2 = RotateTo : : create ( 1 , 0 ) ;
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( act1 , act2 , nullptr ) ;
2013-06-22 03:25:36 +08:00
auto rep1 = RepeatForever : : create ( seq ) ;
auto rep2 = Repeat : : create ( seq - > clone ( ) , 10 ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( rep1 ) ;
_kathia - > runAction ( rep2 ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionRotateToRepeat : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Repeat/RepeatForever + RotateTo " ;
}
//------------------------------------------------------------------
//
// ActionReverse
//
//------------------------------------------------------------------
void ActionReverse : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 1 ) ;
2014-05-15 01:07:09 +08:00
auto jump = JumpBy : : create ( 2 , Vec2 ( 300 , 0 ) , 50 , 4 ) ;
2014-07-10 00:45:27 +08:00
auto action = Sequence : : create ( jump , jump - > reverse ( ) , nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionReverse : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Reverse an action " ;
}
//------------------------------------------------------------------
//
// ActionDelayTime
//
//------------------------------------------------------------------
void ActionDelayTime : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 1 ) ;
2019-09-24 11:31:35 +08:00
auto move = MoveBy : : create ( 1 , Vec2 ( 150.0f , 0.0f ) ) ;
2014-07-10 00:45:27 +08:00
auto action = Sequence : : create ( move , DelayTime : : create ( 2 ) , move , nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionDelayTime : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " DelayTime: m + delay + m " ;
}
//------------------------------------------------------------------
//
// ActionReverseSequence
//
//------------------------------------------------------------------
void ActionReverseSequence : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 1 ) ;
2019-09-24 11:31:35 +08:00
auto move1 = MoveBy : : create ( 1 , Vec2 ( 250.0f , 0.0f ) ) ;
auto move2 = MoveBy : : create ( 1 , Vec2 ( 0.0f , 50.0f ) ) ;
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( move1 , move2 , move1 - > reverse ( ) , nullptr ) ;
auto action = Sequence : : create ( seq , seq - > reverse ( ) , nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionReverseSequence : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Reverse a sequence " ;
}
//------------------------------------------------------------------
//
// ActionReverseSequence2
//
//------------------------------------------------------------------
void ActionReverseSequence2 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 2 ) ;
// Test:
// Sequence should work both with IntervalAction and InstantActions
2019-09-24 11:31:35 +08:00
auto move1 = MoveBy : : create ( 1 , Vec2 ( 250.0f , 0.0f ) ) ;
auto move2 = MoveBy : : create ( 1 , Vec2 ( 0.0f , 50.0f ) ) ;
2013-06-20 14:17:10 +08:00
auto tog1 = ToggleVisibility : : create ( ) ;
auto tog2 = ToggleVisibility : : create ( ) ;
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( move1 , tog1 , move2 , tog2 , move1 - > reverse ( ) , nullptr ) ;
auto action = Repeat : : create ( Sequence : : create ( seq , seq - > reverse ( ) , nullptr ) , 3 ) ;
2012-04-19 14:35:52 +08:00
// Test:
// Also test that the reverse of Hide is Show, and vice-versa
2013-06-15 14:03:30 +08:00
_kathia - > runAction ( action ) ;
2012-04-19 14:35:52 +08:00
2019-09-24 11:31:35 +08:00
auto move_tamara = MoveBy : : create ( 1 , Vec2 ( 100.0f , 0.0f ) ) ;
auto move_tamara2 = MoveBy : : create ( 1 , Vec2 ( 50.0f , 0.0f ) ) ;
2013-06-20 14:17:10 +08:00
auto hide = Hide : : create ( ) ;
2014-07-10 00:45:27 +08:00
auto seq_tamara = Sequence : : create ( move_tamara , hide , move_tamara2 , nullptr ) ;
2013-06-19 06:06:53 +08:00
auto seq_back = seq_tamara - > reverse ( ) ;
2014-07-10 00:45:27 +08:00
_tamara - > runAction ( Sequence : : create ( seq_tamara , seq_back , nullptr ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionReverseSequence2 : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Reverse sequence 2 " ;
}
//------------------------------------------------------------------
//
// ActionRepeat
//
//------------------------------------------------------------------
void ActionRepeat : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 2 ) ;
2019-09-24 11:31:35 +08:00
auto a1 = MoveBy : : create ( 1 , Vec2 ( 150.0f , 0.0f ) ) ;
2013-06-22 03:25:36 +08:00
auto action1 = Repeat : : create (
2019-09-24 11:31:35 +08:00
Sequence : : create ( Place : : create ( Vec2 ( 60.0f , 60.0f ) ) , a1 , nullptr ) ,
2012-04-19 14:35:52 +08:00
3 ) ;
2013-06-22 03:25:36 +08:00
auto action2 = RepeatForever : : create (
2014-07-10 00:45:27 +08:00
Sequence : : create ( a1 - > clone ( ) , a1 - > reverse ( ) , nullptr )
2012-04-19 14:35:52 +08:00
) ;
2013-06-15 14:03:30 +08:00
_kathia - > runAction ( action1 ) ;
_tamara - > runAction ( action2 ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionRepeat : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Repeat / RepeatForever actions " ;
}
//------------------------------------------------------------------
//
// ActionOrbit
//
//------------------------------------------------------------------
void ActionOrbit : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
2013-12-21 11:19:24 +08:00
Director : : getInstance ( ) - > setProjection ( Director : : Projection : : _2D ) ;
2012-04-19 14:35:52 +08:00
centerSprites ( 3 ) ;
2013-06-22 03:25:36 +08:00
auto orbit1 = OrbitCamera : : create ( 2 , 1 , 0 , 0 , 180 , 0 , 0 ) ;
2013-12-21 11:19:24 +08:00
auto action1 = Sequence : : create (
2012-04-19 14:35:52 +08:00
orbit1 ,
orbit1 - > reverse ( ) ,
2014-03-25 06:09:24 +08:00
nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto orbit2 = OrbitCamera : : create ( 2 , 1 , 0 , 0 , 180 , - 45 , 0 ) ;
2013-12-21 11:19:24 +08:00
auto action2 = Sequence : : create (
2012-04-19 14:35:52 +08:00
orbit2 ,
orbit2 - > reverse ( ) ,
2014-03-25 06:09:24 +08:00
nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto orbit3 = OrbitCamera : : create ( 2 , 1 , 0 , 0 , 180 , 90 , 0 ) ;
2013-12-21 11:19:24 +08:00
auto action3 = Sequence : : create (
2012-04-19 14:35:52 +08:00
orbit3 ,
orbit3 - > reverse ( ) ,
2014-03-25 06:09:24 +08:00
nullptr ) ;
2013-12-21 08:33:31 +08:00
2013-12-21 11:19:24 +08:00
_kathia - > runAction ( RepeatForever : : create ( action1 ) ) ;
_tamara - > runAction ( RepeatForever : : create ( action2 ) ) ;
_grossini - > runAction ( RepeatForever : : create ( action3 ) ) ;
2019-09-24 11:31:35 +08:00
auto move = MoveBy : : create ( 3 , Vec2 ( 100.0f , - 100.0f ) ) ;
2013-12-21 11:19:24 +08:00
auto move_back = move - > reverse ( ) ;
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( move , move_back , nullptr ) ;
2013-12-21 11:19:24 +08:00
auto rfe = RepeatForever : : create ( seq ) ;
_kathia - > runAction ( rfe ) ;
_tamara - > runAction ( rfe - > clone ( ) ) ;
_grossini - > runAction ( rfe - > clone ( ) ) ;
2012-04-19 14:35:52 +08:00
}
2014-04-02 17:12:09 +08:00
void ActionOrbit : : onExit ( )
{
ActionsDemo : : onExit ( ) ;
Director : : getInstance ( ) - > setProjection ( Director : : Projection : : DEFAULT ) ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionOrbit : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " OrbitCamera action " ;
}
//------------------------------------------------------------------
//
// ActionFollow
//
//------------------------------------------------------------------
void ActionFollow : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 1 ) ;
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2012-04-19 14:35:52 +08:00
2014-09-11 15:39:56 +08:00
DrawNode * drawNode = DrawNode : : create ( ) ;
float x = s . width * 2 - 100 ;
float y = s . height ;
2019-09-24 11:31:35 +08:00
Vec2 vertices [ ] = { Vec2 ( 5.0f , 5.0f ) , Vec2 ( x - 5 , 5.0f ) , Vec2 ( x - 5 , y - 5 ) , Vec2 ( 5.0f , y - 5 ) } ;
drawNode - > drawPoly ( vertices , 4 , true , Color4F ( CCRANDOM_0_1 ( ) , CCRANDOM_0_1 ( ) , CCRANDOM_0_1 ( ) , 1.0f ) ) ;
2014-09-11 15:39:56 +08:00
this - > addChild ( drawNode ) ;
2019-09-24 11:31:35 +08:00
_grossini - > setPosition ( - 200.0f , s . height / 2 ) ;
auto move = MoveBy : : create ( 2 , Vec2 ( s . width * 3 , 0.0f ) ) ;
2013-06-22 03:25:36 +08:00
auto move_back = move - > reverse ( ) ;
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( move , move_back , nullptr ) ;
2013-07-24 06:20:22 +08:00
auto rep = RepeatForever : : create ( seq ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( rep ) ;
2012-04-19 14:35:52 +08:00
2019-09-24 11:31:35 +08:00
this - > runAction ( Follow : : create ( _grossini , Rect ( 0.0f , 0.0f , s . width * 2 - 100 , s . height ) ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionFollow : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Follow action " ;
}
2016-04-20 17:25:31 +08:00
//------------------------------------------------------------------
//
// ActionFollowWithOffset
//
//------------------------------------------------------------------
void ActionFollowWithOffset : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 1 ) ;
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
DrawNode * drawNode = DrawNode : : create ( ) ;
float x = s . width * 2 - 100 ;
float y = s . height ;
2019-09-24 11:31:35 +08:00
Vec2 vertices [ ] = { Vec2 ( 5.0f , 5.0f ) , Vec2 ( x - 5 , 5.0f ) , Vec2 ( x - 5 , y - 5 ) , Vec2 ( 5.0f , y - 5 ) } ;
drawNode - > drawPoly ( vertices , 4 , true , Color4F ( CCRANDOM_0_1 ( ) , CCRANDOM_0_1 ( ) , CCRANDOM_0_1 ( ) , 1.0f ) ) ;
2016-04-20 17:25:31 +08:00
this - > addChild ( drawNode ) ;
_grossini - > setPosition ( - 200 , s . height / 2 ) ;
2019-09-24 11:31:35 +08:00
auto move = MoveBy : : create ( 2 , Vec2 ( s . width * 3 , 1.0f ) ) ;
2016-04-20 17:25:31 +08:00
auto move_back = move - > reverse ( ) ;
auto seq = Sequence : : create ( move , move_back , nullptr ) ;
auto rep = RepeatForever : : create ( seq ) ;
_grossini - > runAction ( rep ) ;
//sample offset values set
float verticalOffset = - 900 ;
float horizontalOffset = 200 ;
2019-09-24 11:31:35 +08:00
this - > runAction ( Follow : : createWithOffset ( _grossini , horizontalOffset , verticalOffset , Rect ( 0.0f , 0.0f , s . width * 2 - 100 , s . height ) ) ) ;
2016-04-20 17:25:31 +08:00
}
std : : string ActionFollowWithOffset : : subtitle ( ) const
{
return " Follow action with horizontal and vertical offset " ;
}
2012-04-19 14:35:52 +08:00
void ActionTargeted : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 2 ) ;
2014-05-15 01:07:09 +08:00
auto jump1 = JumpBy : : create ( 2 , Vec2 : : ZERO , 100 , 3 ) ;
2013-06-22 03:25:36 +08:00
auto jump2 = jump1 - > clone ( ) ;
2013-07-24 06:20:22 +08:00
auto rot1 = RotateBy : : create ( 1 , 360 ) ;
2013-06-22 03:25:36 +08:00
auto rot2 = rot1 - > clone ( ) ;
2012-04-19 14:35:52 +08:00
2013-06-22 03:25:36 +08:00
auto t1 = TargetedAction : : create ( _kathia , jump2 ) ;
auto t2 = TargetedAction : : create ( _kathia , rot2 ) ;
2012-04-19 14:35:52 +08:00
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( jump1 , t1 , rot1 , t2 , nullptr ) ;
2013-06-22 03:25:36 +08:00
auto always = RepeatForever : : create ( seq ) ;
2012-04-19 14:35:52 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( always ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionTargeted : : title ( ) const
2012-04-19 14:35:52 +08:00
{
return " ActionTargeted " ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionTargeted : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Action that runs on another target. Useful for sequences " ;
}
2013-08-01 10:28:18 +08:00
void ActionTargetedReverse : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 2 ) ;
2014-05-15 01:07:09 +08:00
auto jump1 = JumpBy : : create ( 2 , Vec2 : : ZERO , 100 , 3 ) ;
2013-08-01 10:28:18 +08:00
auto jump2 = jump1 - > clone ( ) ;
auto rot1 = RotateBy : : create ( 1 , 360 ) ;
auto rot2 = rot1 - > clone ( ) ;
auto t1 = TargetedAction : : create ( _kathia , jump2 ) ;
auto t2 = TargetedAction : : create ( _kathia , rot2 ) ;
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( jump1 , t1 - > reverse ( ) , rot1 , t2 - > reverse ( ) , nullptr ) ;
2013-08-01 10:28:18 +08:00
auto always = RepeatForever : : create ( seq ) ;
_tamara - > runAction ( always ) ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionTargetedReverse : : title ( ) const
2013-08-01 10:28:18 +08:00
{
return " ActionTargetedReverse " ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionTargetedReverse : : subtitle ( ) const
2013-08-01 10:28:18 +08:00
{
return " Action that runs reversely on another target. Useful for sequences " ;
}
2014-03-26 14:54:50 +08:00
// ActionStacked
2013-02-28 14:42:45 +08:00
void ActionStacked : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
2013-02-28 15:32:27 +08:00
2013-02-28 14:42:45 +08:00
this - > centerSprites ( 0 ) ;
2015-04-09 14:20:59 +08:00
auto listener = EventListenerTouchAllAtOnce : : create ( ) ;
2013-10-23 16:14:03 +08:00
listener - > onTouchesEnded = CC_CALLBACK_2 ( ActionStacked : : onTouchesEnded , this ) ;
2015-04-09 14:20:59 +08:00
_eventDispatcher - > addEventListenerWithSceneGraphPriority ( listener , this ) ;
2013-02-28 14:42:45 +08:00
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2014-05-15 01:07:09 +08:00
this - > addNewSpriteWithCoords ( Vec2 ( s . width / 2 , s . height / 2 ) ) ;
2013-02-28 14:42:45 +08:00
}
2014-05-15 01:07:09 +08:00
void ActionStacked : : addNewSpriteWithCoords ( Vec2 p )
2013-02-28 14:42:45 +08:00
{
2013-02-28 15:32:27 +08:00
int idx = CCRANDOM_0_1 ( ) * 1400 / 100 ;
int x = ( idx % 5 ) * 85 ;
int y = ( idx / 5 ) * 121 ;
2013-02-28 14:42:45 +08:00
2013-02-28 15:32:27 +08:00
2013-08-16 16:05:27 +08:00
auto sprite = Sprite : : create ( " Images/grossini_dance_atlas.png " , Rect ( x , y , 85 , 121 ) ) ;
2013-02-28 15:32:27 +08:00
sprite - > setPosition ( p ) ;
this - > addChild ( sprite ) ;
this - > runActionsInSprite ( sprite ) ;
2013-02-28 14:42:45 +08:00
}
2013-06-20 14:17:10 +08:00
void ActionStacked : : runActionsInSprite ( Sprite * sprite )
2013-02-28 14:42:45 +08:00
{
2013-02-28 15:32:27 +08:00
// override me
2013-02-28 14:42:45 +08:00
}
2013-09-03 18:22:03 +08:00
void ActionStacked : : onTouchesEnded ( const std : : vector < Touch * > & touches , Event * event )
2013-02-28 14:42:45 +08:00
{
2013-09-03 18:22:03 +08:00
for ( auto & touch : touches ) {
2013-08-16 16:05:27 +08:00
auto location = touch - > getLocation ( ) ;
2013-02-28 14:42:45 +08:00
addNewSpriteWithCoords ( location ) ;
}
2015-04-09 14:20:59 +08:00
}
2013-02-28 14:42:45 +08:00
2013-12-19 05:52:10 +08:00
std : : string ActionStacked : : title ( ) const
2013-02-28 14:42:45 +08:00
{
return " Override me " ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionStacked : : subtitle ( ) const
2013-02-28 14:42:45 +08:00
{
return " Tap screen " ;
}
2014-03-26 14:54:50 +08:00
// ActionMoveStacked
2013-02-28 14:42:45 +08:00
2013-06-20 14:17:10 +08:00
void ActionMoveStacked : : runActionsInSprite ( Sprite * sprite )
2013-02-28 14:42:45 +08:00
{
2013-02-28 15:32:27 +08:00
sprite - > runAction (
2013-06-20 14:17:10 +08:00
RepeatForever : : create (
Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 0.05f , Vec2 ( 10.0f , 10.0f ) ) ,
MoveBy : : create ( 0.05f , Vec2 ( - 10.0f , - 10.0f ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ) ) ;
2013-02-28 15:32:27 +08:00
2019-09-24 11:31:35 +08:00
auto action = MoveBy : : create ( 2.0f , Vec2 ( 400.0f , 0.0f ) ) ;
2013-08-16 16:05:27 +08:00
auto action_back = action - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
sprite - > runAction (
2013-06-20 14:17:10 +08:00
RepeatForever : : create (
2014-07-10 00:45:27 +08:00
Sequence : : create ( action , action_back , nullptr )
2013-02-28 15:32:27 +08:00
) ) ;
2013-02-28 14:42:45 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionMoveStacked : : title ( ) const
2013-02-28 14:42:45 +08:00
{
2013-06-20 14:17:10 +08:00
return " Stacked MoveBy/To actions " ;
2013-02-28 15:32:27 +08:00
}
2014-03-26 14:54:50 +08:00
// ActionMoveJumpStacked
2013-02-28 15:32:27 +08:00
2013-06-20 14:17:10 +08:00
void ActionMoveJumpStacked : : runActionsInSprite ( Sprite * sprite )
2013-02-28 15:32:27 +08:00
{
sprite - > runAction (
2013-06-20 14:17:10 +08:00
RepeatForever : : create (
Sequence : : create (
2014-05-15 01:07:09 +08:00
MoveBy : : create ( 0.05f , Vec2 ( 10 , 2 ) ) ,
MoveBy : : create ( 0.05f , Vec2 ( - 10 , - 2 ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ) ) ;
2013-02-28 15:32:27 +08:00
2014-05-15 01:07:09 +08:00
auto jump = JumpBy : : create ( 2.0f , Vec2 ( 400 , 0 ) , 100 , 5 ) ;
2013-06-22 03:25:36 +08:00
auto jump_back = jump - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
sprite - > runAction (
2013-06-20 14:17:10 +08:00
RepeatForever : : create (
2014-07-10 00:45:27 +08:00
Sequence : : create ( jump , jump_back , nullptr )
2013-02-28 15:32:27 +08:00
) ) ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionMoveJumpStacked : : title ( ) const
2013-02-28 15:32:27 +08:00
{
return " tacked Move + Jump actions " ;
}
2014-03-26 14:54:50 +08:00
// ActionMoveBezierStacked
2013-02-28 15:32:27 +08:00
2013-06-20 14:17:10 +08:00
void ActionMoveBezierStacked : : runActionsInSprite ( Sprite * sprite )
2013-02-28 15:32:27 +08:00
{
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2013-02-28 15:32:27 +08:00
// sprite 1
ccBezierConfig bezier ;
2019-09-24 11:31:35 +08:00
bezier . controlPoint_1 = Vec2 ( 0.0f , s . height / 2 ) ;
bezier . controlPoint_2 = Vec2 ( 300.0f , - s . height / 2 ) ;
bezier . endPosition = Vec2 ( 300.0f , 100.0f ) ;
2013-02-28 15:32:27 +08:00
2013-08-16 16:05:27 +08:00
auto bezierForward = BezierBy : : create ( 3 , bezier ) ;
auto bezierBack = bezierForward - > reverse ( ) ;
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( bezierForward , bezierBack , nullptr ) ;
2013-08-16 16:05:27 +08:00
auto rep = RepeatForever : : create ( seq ) ;
2013-02-28 15:32:27 +08:00
sprite - > runAction ( rep ) ;
sprite - > runAction (
2013-06-20 14:17:10 +08:00
RepeatForever : : create (
Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 0.05f , Vec2 ( 10.0f , 0.0f ) ) ,
MoveBy : : create ( 0.05f , Vec2 ( - 10.0f , 0.0f ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ) ) ;
2013-02-28 15:32:27 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionMoveBezierStacked : : title ( ) const
2013-02-28 15:32:27 +08:00
{
return " Stacked Move + Bezier actions " ;
}
2014-03-26 14:54:50 +08:00
// ActionCatmullRomStacked
2013-02-28 15:32:27 +08:00
void ActionCatmullRomStacked : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
this - > centerSprites ( 2 ) ;
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2013-02-28 15:32:27 +08:00
//
// 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).
//
2014-08-28 11:41:18 +08:00
_tamara - > setPosition ( 50 , 50 ) ;
2013-02-28 15:32:27 +08:00
2013-06-22 03:25:36 +08:00
auto array = PointArray : : create ( 20 ) ;
2013-02-28 15:32:27 +08:00
2019-09-24 11:31:35 +08:00
array - > addControlPoint ( Vec2 ( 0.0f , 0.0f ) ) ;
array - > addControlPoint ( Vec2 ( 80.0f , 80.0f ) ) ;
array - > addControlPoint ( Vec2 ( s . width - 80 , 80.0f ) ) ;
array - > addControlPoint ( Vec2 ( s . width - 80 , s . height - 80.0f ) ) ;
array - > addControlPoint ( Vec2 ( 80.0f , s . height - 80.0f ) ) ;
array - > addControlPoint ( Vec2 ( 80.0f , 80.0f ) ) ;
2014-05-15 01:07:09 +08:00
array - > addControlPoint ( Vec2 ( s . width / 2 , s . height / 2 ) ) ;
2013-02-28 15:32:27 +08:00
2013-06-22 03:25:36 +08:00
auto action = CatmullRomBy : : create ( 3 , array ) ;
auto reverse = action - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( action , reverse , nullptr ) ;
2013-02-28 15:32:27 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( seq ) ;
2013-02-28 15:32:27 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction (
2013-06-22 03:25:36 +08:00
RepeatForever : : create (
Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 0.05f , Vec2 ( 10.0f , 0.0f ) ) ,
MoveBy : : create ( 0.05f , Vec2 ( - 10.0f , 0.0f ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ) ) ;
2013-02-28 15:32:27 +08:00
2014-09-11 15:39:56 +08:00
auto drawNode1 = DrawNode : : create ( ) ;
2019-09-24 11:31:35 +08:00
drawNode1 - > setPosition ( Vec2 ( 50.0f , 50.0f ) ) ;
drawNode1 - > drawCatmullRom ( array , 50 , Color4F ( 1.0f , 1.0f , 0.0f , 0.5f ) ) ;
2014-09-11 15:39:56 +08:00
this - > addChild ( drawNode1 ) ;
2013-02-28 15:32:27 +08:00
//
// 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
//
2013-06-22 03:25:36 +08:00
auto array2 = PointArray : : create ( 20 ) ;
2013-02-28 15:32:27 +08:00
2019-09-24 11:31:35 +08:00
array2 - > addControlPoint ( Vec2 ( s . width / 2 , 30.0f ) ) ;
array2 - > addControlPoint ( Vec2 ( s . width - 80 , 30.0f ) ) ;
array2 - > addControlPoint ( Vec2 ( s . width - 80.0f , s . height - 80.0f ) ) ;
array2 - > addControlPoint ( Vec2 ( s . width / 2 , s . height - 80.0f ) ) ;
array2 - > addControlPoint ( Vec2 ( s . width / 2 , 30.0f ) ) ;
2013-02-28 15:32:27 +08:00
2013-06-22 03:25:36 +08:00
auto action2 = CatmullRomTo : : create ( 3 , array2 ) ;
auto reverse2 = action2 - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
2014-07-10 00:45:27 +08:00
auto seq2 = Sequence : : create ( action2 , reverse2 , nullptr ) ;
2013-02-28 15:32:27 +08:00
2013-06-15 14:03:30 +08:00
_kathia - > runAction ( seq2 ) ;
2013-02-28 15:32:27 +08:00
2013-06-15 14:03:30 +08:00
_kathia - > runAction (
2013-06-22 03:25:36 +08:00
RepeatForever : : create (
Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 0.05f , Vec2 ( 10.0f , 0.0f ) ) ,
MoveBy : : create ( 0.05f , Vec2 ( - 10.0f , 0.0f ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ) ) ;
2013-02-28 15:32:27 +08:00
2014-09-11 15:39:56 +08:00
auto drawNode2 = DrawNode : : create ( ) ;
drawNode2 - > drawCatmullRom ( array2 , 50 , Color4F ( 1.0 , 0.0 , 0.0 , 0.5 ) ) ;
this - > addChild ( drawNode2 ) ;
2013-02-28 15:32:27 +08:00
}
ActionCatmullRomStacked : : ~ ActionCatmullRomStacked ( )
{
}
2013-02-28 14:42:45 +08:00
2013-12-19 05:52:10 +08:00
std : : string ActionCatmullRomStacked : : title ( ) const
2013-02-28 15:32:27 +08:00
{
return " Stacked MoveBy + CatmullRom actions " ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionCatmullRomStacked : : subtitle ( ) const
2013-02-28 15:32:27 +08:00
{
return " MoveBy + CatmullRom at the same time in the same sprite " ;
}
2014-03-26 14:54:50 +08:00
// ActionCardinalSplineStacked
2013-02-28 15:32:27 +08:00
void ActionCardinalSplineStacked : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
this - > centerSprites ( 2 ) ;
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2013-02-28 15:32:27 +08:00
2013-06-22 03:25:36 +08:00
auto array = PointArray : : create ( 20 ) ;
2013-02-28 15:32:27 +08:00
2019-09-24 11:31:35 +08:00
array - > addControlPoint ( Vec2 ( 0.0f , 0.0f ) ) ;
array - > addControlPoint ( Vec2 ( s . width / 2 - 30 , 0.0f ) ) ;
array - > addControlPoint ( Vec2 ( s . width / 2 - 30 , s . height - 80.0f ) ) ;
array - > addControlPoint ( Vec2 ( 0.0f , s . height - 80.0f ) ) ;
array - > addControlPoint ( Vec2 ( 0.0f , 0.0f ) ) ;
2013-02-28 15:32:27 +08:00
//
// sprite 1 (By)
//
// Spline with no tension (tension==0)
//
2013-06-22 03:25:36 +08:00
auto action = CardinalSplineBy : : create ( 3 , array , 0 ) ;
auto reverse = action - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( action , reverse , nullptr ) ;
2013-02-28 15:32:27 +08:00
2014-08-28 11:41:18 +08:00
_tamara - > setPosition ( 50 , 50 ) ;
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( seq ) ;
2013-02-28 15:32:27 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction (
2013-06-22 03:25:36 +08:00
RepeatForever : : create (
Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 0.05f , Vec2 ( 10.0f , 0.0f ) ) ,
MoveBy : : create ( 0.05f , Vec2 ( - 10.0f , 0.0f ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ) ) ;
2013-02-28 15:32:27 +08:00
2014-09-11 15:39:56 +08:00
auto drawNode1 = DrawNode : : create ( ) ;
2019-09-24 11:31:35 +08:00
drawNode1 - > setPosition ( Vec2 ( 50.0f , 50.0f ) ) ;
drawNode1 - > drawCardinalSpline ( array , 0 , 100 , Color4F ( 1.0f , 0.0f , 1.0f , 1.0f ) ) ;
2014-09-11 15:39:56 +08:00
this - > addChild ( drawNode1 ) ;
2013-02-28 15:32:27 +08:00
//
// sprite 2 (By)
//
// Spline with high tension (tension==1)
//
2013-06-22 03:25:36 +08:00
auto * action2 = CardinalSplineBy : : create ( 3 , array , 1 ) ;
auto reverse2 = action2 - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
2014-07-10 00:45:27 +08:00
auto seq2 = Sequence : : create ( action2 , reverse2 , nullptr ) ;
2013-02-28 15:32:27 +08:00
2014-08-28 11:41:18 +08:00
_kathia - > setPosition ( s . width / 2 , 50 ) ;
2013-02-28 15:32:27 +08:00
2013-06-15 14:03:30 +08:00
_kathia - > runAction ( seq2 ) ;
2013-02-28 15:32:27 +08:00
2013-06-15 14:03:30 +08:00
_kathia - > runAction (
2013-06-22 03:25:36 +08:00
RepeatForever : : create (
Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 0.05f , Vec2 ( 10.0f , 0.0f ) ) ,
MoveBy : : create ( 0.05f , Vec2 ( - 10.0f , 0.0f ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ) ) ;
2013-02-28 15:32:27 +08:00
2014-09-11 15:39:56 +08:00
auto drawNode2 = DrawNode : : create ( ) ;
2019-09-24 11:31:35 +08:00
drawNode2 - > setPosition ( Vec2 ( s . width / 2 , 50.0f ) ) ;
drawNode2 - > drawCardinalSpline ( array , 1 , 100 , Color4F ( 0.0f , 0.0f , 1.0f , 1.0f ) ) ;
2014-09-11 15:39:56 +08:00
this - > addChild ( drawNode2 ) ;
2013-02-28 15:32:27 +08:00
}
ActionCardinalSplineStacked : : ~ ActionCardinalSplineStacked ( )
{
}
2013-12-19 05:52:10 +08:00
std : : string ActionCardinalSplineStacked : : title ( ) const
2013-02-28 15:32:27 +08:00
{
return " Stacked MoveBy + CardinalSpline actions " ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionCardinalSplineStacked : : subtitle ( ) const
2013-02-28 15:32:27 +08:00
{
2013-06-20 14:17:10 +08:00
return " CCMoveBy + CardinalSplineBy/To at the same time " ;
2013-02-28 15:32:27 +08:00
}
// Issue1305
2012-04-19 14:35:52 +08:00
void Issue1305 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 0 ) ;
2013-06-20 14:17:10 +08:00
_spriteTmp = Sprite : : create ( " Images/grossini.png " ) ;
_spriteTmp - > runAction ( CallFunc : : create ( std : : bind ( & Issue1305 : : log , this , _spriteTmp ) ) ) ;
2013-06-15 14:03:30 +08:00
_spriteTmp - > retain ( ) ;
2012-04-19 14:35:52 +08:00
2014-10-04 00:38:36 +08:00
scheduleOnce ( [ & ] ( float dt ) {
_spriteTmp - > setPosition ( 250 , 250 ) ;
addChild ( _spriteTmp ) ;
} , 2 , " update_key " ) ;
2012-04-19 14:35:52 +08:00
}
2013-07-26 06:53:24 +08:00
void Issue1305 : : log ( Node * sender )
2012-04-19 14:35:52 +08:00
{
2013-07-24 06:20:22 +08:00
cocos2d : : log ( " This message SHALL ONLY appear when the sprite is added to the scene, NOT BEFORE " ) ;
2012-04-19 14:35:52 +08:00
}
void Issue1305 : : onExit ( )
{
2013-06-15 14:03:30 +08:00
_spriteTmp - > stopAllActions ( ) ;
_spriteTmp - > release ( ) ;
2012-05-30 16:09:19 +08:00
ActionsDemo : : onExit ( ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string Issue1305 : : title ( ) const
2012-04-19 14:35:52 +08:00
{
return " Issue 1305 " ;
}
2013-12-19 05:52:10 +08:00
std : : string Issue1305 : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " In two seconds you should see a message on the console. NOT BEFORE. " ;
}
void Issue1305_2 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 0 ) ;
2013-06-22 03:25:36 +08:00
auto spr = Sprite : : create ( " Images/grossini.png " ) ;
2014-08-28 11:41:18 +08:00
spr - > setPosition ( 200 , 200 ) ;
2012-04-19 14:35:52 +08:00
addChild ( spr ) ;
2019-09-24 11:31:35 +08:00
auto act1 = MoveBy : : create ( 2 , Vec2 ( 0.0f , 100.0f ) ) ;
2013-06-20 14:17:10 +08:00
/* c++ can't support block, so we use CallFuncN instead.
id act2 = [ CallBlock actionWithBlock : ^ {
2012-04-19 14:35:52 +08:00
NSLog ( @ " 1st block " ) ;
2013-02-28 14:42:45 +08:00
} ) ;
2014-05-15 01:07:09 +08:00
id act3 = [ MoveBy create : 2 , Vec2 ( 0 , - 100 ) ) ;
2013-06-20 14:17:10 +08:00
id act4 = [ CallBlock actionWithBlock : ^ {
2012-04-19 14:35:52 +08:00
NSLog ( @ " 2nd block " ) ;
2013-02-28 14:42:45 +08:00
} ) ;
2014-05-15 01:07:09 +08:00
id act5 = [ MoveBy create : 2 , Vec2 ( 100 , - 100 ) ) ;
2013-06-20 14:17:10 +08:00
id act6 = [ CallBlock actionWithBlock : ^ {
2012-04-19 14:35:52 +08:00
NSLog ( @ " 3rd block " ) ;
2013-02-28 14:42:45 +08:00
} ) ;
2014-05-15 01:07:09 +08:00
id act7 = [ MoveBy create : 2 , Vec2 ( - 100 , 0 ) ) ;
2013-06-20 14:17:10 +08:00
id act8 = [ CallBlock actionWithBlock : ^ {
2012-04-19 14:35:52 +08:00
NSLog ( @ " 4th block " ) ;
2013-02-28 14:42:45 +08:00
} ) ;
2012-04-19 14:35:52 +08:00
*/
2013-06-22 03:25:36 +08:00
auto act2 = CallFunc : : create ( std : : bind ( & Issue1305_2 : : printLog1 , this ) ) ;
2019-09-24 11:31:35 +08:00
auto act3 = MoveBy : : create ( 2 , Vec2 ( 0.0f , - 100.0f ) ) ;
2013-06-22 03:25:36 +08:00
auto act4 = CallFunc : : create ( std : : bind ( & Issue1305_2 : : printLog2 , this ) ) ;
2019-09-24 11:31:35 +08:00
auto act5 = MoveBy : : create ( 2 , Vec2 ( 100.0f , - 100.0f ) ) ;
2013-06-22 03:25:36 +08:00
auto act6 = CallFunc : : create ( std : : bind ( & Issue1305_2 : : printLog3 , this ) ) ;
2019-09-24 11:31:35 +08:00
auto act7 = MoveBy : : create ( 2 , Vec2 ( - 100.0f , 0.0f ) ) ;
2013-06-22 03:25:36 +08:00
auto act8 = CallFunc : : create ( std : : bind ( & Issue1305_2 : : printLog4 , this ) ) ;
2012-04-19 14:35:52 +08:00
2014-07-10 00:45:27 +08:00
auto actF = Sequence : : create ( act1 , act2 , act3 , act4 , act5 , act6 , act7 , act8 , nullptr ) ;
2012-04-19 14:35:52 +08:00
2013-02-28 14:42:45 +08:00
// [spr runAction:actF);
2013-07-12 06:24:23 +08:00
Director : : getInstance ( ) - > getActionManager ( ) - > addAction ( actF , spr , false ) ;
2012-04-19 14:35:52 +08:00
}
2012-10-26 04:40:37 +08:00
void Issue1305_2 : : printLog1 ( )
2012-04-19 14:35:52 +08:00
{
2013-07-24 06:20:22 +08:00
log ( " 1st block " ) ;
2012-04-19 14:35:52 +08:00
}
2012-10-26 04:40:37 +08:00
void Issue1305_2 : : printLog2 ( )
2012-04-19 14:35:52 +08:00
{
2013-07-24 06:20:22 +08:00
log ( " 2nd block " ) ;
2012-04-19 14:35:52 +08:00
}
2012-10-26 04:40:37 +08:00
void Issue1305_2 : : printLog3 ( )
2012-04-19 14:35:52 +08:00
{
2013-07-24 06:20:22 +08:00
log ( " 3rd block " ) ;
2012-04-19 14:35:52 +08:00
}
2012-10-26 04:40:37 +08:00
void Issue1305_2 : : printLog4 ( )
2012-04-19 14:35:52 +08:00
{
2013-07-24 06:20:22 +08:00
log ( " 4th block " ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string Issue1305_2 : : title ( ) const
2012-04-19 14:35:52 +08:00
{
return " Issue 1305 #2 " ;
}
2013-12-19 05:52:10 +08:00
std : : string Issue1305_2 : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " See console. You should only see one message for each block " ;
}
void Issue1288 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 0 ) ;
2013-08-16 16:05:27 +08:00
auto spr = Sprite : : create ( " Images/grossini.png " ) ;
2014-08-28 11:41:18 +08:00
spr - > setPosition ( 100 , 100 ) ;
2012-04-19 14:35:52 +08:00
addChild ( spr ) ;
2019-09-24 11:31:35 +08:00
auto act1 = MoveBy : : create ( 0.5 , Vec2 ( 100.0f , 0.0f ) ) ;
2013-08-16 16:05:27 +08:00
auto act2 = act1 - > reverse ( ) ;
2014-07-10 00:45:27 +08:00
auto act3 = Sequence : : create ( act1 , act2 , nullptr ) ;
2013-08-16 16:05:27 +08:00
auto act4 = Repeat : : create ( act3 , 2 ) ;
2012-04-19 14:35:52 +08:00
spr - > runAction ( act4 ) ;
}
2013-12-19 05:52:10 +08:00
std : : string Issue1288 : : title ( ) const
2012-04-19 14:35:52 +08:00
{
return " Issue 1288 " ;
}
2013-12-19 05:52:10 +08:00
std : : string Issue1288 : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Sprite should end at the position where it started. " ;
}
void Issue1288_2 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 0 ) ;
2013-06-22 03:25:36 +08:00
auto spr = Sprite : : create ( " Images/grossini.png " ) ;
2014-08-28 11:41:18 +08:00
spr - > setPosition ( 100 , 100 ) ;
2012-04-19 14:35:52 +08:00
addChild ( spr ) ;
2019-09-24 11:31:35 +08:00
auto act1 = MoveBy : : create ( 0.5 , Vec2 ( 100.0f , 0.0f ) ) ;
2013-06-20 14:17:10 +08:00
spr - > runAction ( Repeat : : create ( act1 , 1 ) ) ;
2012-04-19 14:35:52 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string Issue1288_2 : : title ( ) const
2012-04-19 14:35:52 +08:00
{
return " Issue 1288 #2 " ;
}
2013-12-19 05:52:10 +08:00
std : : string Issue1288_2 : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " Sprite should move 100 pixels, and stay there " ;
}
void Issue1327 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 0 ) ;
2013-06-22 03:25:36 +08:00
auto spr = Sprite : : create ( " Images/grossini.png " ) ;
2014-08-28 11:41:18 +08:00
spr - > setPosition ( 100 , 100 ) ;
2012-04-19 14:35:52 +08:00
addChild ( spr ) ;
2013-06-22 03:25:36 +08:00
auto act1 = CallFunc : : create ( std : : bind ( & Issue1327 : : logSprRotation , this , spr ) ) ;
auto act2 = RotateBy : : create ( 0.25 , 45 ) ;
auto act3 = CallFunc : : create ( std : : bind ( & Issue1327 : : logSprRotation , this , spr ) ) ;
auto act4 = RotateBy : : create ( 0.25 , 45 ) ;
auto act5 = CallFunc : : create ( std : : bind ( & Issue1327 : : logSprRotation , this , spr ) ) ;
auto act6 = RotateBy : : create ( 0.25 , 45 ) ;
auto act7 = CallFunc : : create ( std : : bind ( & Issue1327 : : logSprRotation , this , spr ) ) ;
auto act8 = RotateBy : : create ( 0.25 , 45 ) ;
auto act9 = CallFunc : : create ( std : : bind ( & Issue1327 : : logSprRotation , this , spr ) ) ;
2014-07-10 00:45:27 +08:00
auto actF = Sequence : : create ( act1 , act2 , act3 , act4 , act5 , act6 , act7 , act8 , act9 , nullptr ) ;
2012-04-19 14:35:52 +08:00
spr - > runAction ( actF ) ;
}
2013-12-19 05:52:10 +08:00
std : : string Issue1327 : : title ( ) const
2012-04-19 14:35:52 +08:00
{
return " Issue 1327 " ;
}
2013-12-19 05:52:10 +08:00
std : : string Issue1327 : : subtitle ( ) const
2012-04-19 14:35:52 +08:00
{
return " See console: You should see: 0, 45, 90, 135, 180 " ;
}
2013-07-26 06:53:24 +08:00
void Issue1327 : : logSprRotation ( Sprite * sender )
2012-04-19 14:35:52 +08:00
{
2013-07-26 06:53:24 +08:00
log ( " %f " , sender - > getRotation ( ) ) ;
2012-04-19 14:35:52 +08:00
}
2012-11-19 17:15:16 +08:00
//Issue1398
2013-02-28 14:42:45 +08:00
void Issue1398 : : incrementInteger ( )
{
2013-06-15 14:03:30 +08:00
_testInteger + + ;
2013-07-24 06:20:22 +08:00
log ( " incremented to %d " , _testInteger ) ;
2012-11-19 17:15:16 +08:00
}
void Issue1398 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
this - > centerSprites ( 0 ) ;
2013-06-15 14:03:30 +08:00
_testInteger = 0 ;
2013-07-24 06:20:22 +08:00
log ( " testInt = %d " , _testInteger ) ;
2012-11-19 17:15:16 +08:00
this - > runAction (
2013-06-20 14:17:10 +08:00
Sequence : : create (
CallFunc : : create ( std : : bind ( & Issue1398 : : incrementIntegerCallback , this , ( void * ) " 1 " ) ) ,
CallFunc : : create ( std : : bind ( & Issue1398 : : incrementIntegerCallback , this , ( void * ) " 2 " ) ) ,
CallFunc : : create ( std : : bind ( & Issue1398 : : incrementIntegerCallback , this , ( void * ) " 3 " ) ) ,
CallFunc : : create ( std : : bind ( & Issue1398 : : incrementIntegerCallback , this , ( void * ) " 4 " ) ) ,
CallFunc : : create ( std : : bind ( & Issue1398 : : incrementIntegerCallback , this , ( void * ) " 5 " ) ) ,
CallFunc : : create ( std : : bind ( & Issue1398 : : incrementIntegerCallback , this , ( void * ) " 6 " ) ) ,
CallFunc : : create ( std : : bind ( & Issue1398 : : incrementIntegerCallback , this , ( void * ) " 7 " ) ) ,
CallFunc : : create ( std : : bind ( & Issue1398 : : incrementIntegerCallback , this , ( void * ) " 8 " ) ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ) ;
2012-11-19 17:15:16 +08:00
}
2013-06-04 03:13:24 +08:00
void Issue1398 : : incrementIntegerCallback ( void * data )
2012-11-19 17:15:16 +08:00
{
this - > incrementInteger ( ) ;
2013-07-24 06:20:22 +08:00
log ( " %s " , ( char * ) data ) ;
2012-11-19 17:15:16 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string Issue1398 : : subtitle ( ) const
2012-11-19 17:15:16 +08:00
{
return " See console: You should see an 8 " ;
}
2013-12-19 05:52:10 +08:00
std : : string Issue1398 : : title ( ) const
2012-11-19 17:15:16 +08:00
{
return " Issue 1398 " ;
}
2014-05-27 14:40:38 +08:00
void Issue2599 : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
this - > centerSprites ( 0 ) ;
_count = 0 ;
log ( " before: count = %d " , _count ) ;
log ( " start count up 50 times using Repeat action " ) ;
auto delay = 1.0f / 50 ;
auto repeatAction = Repeat : : create (
Sequence : : createWithTwoActions (
CallFunc : : create ( [ & ] ( ) { this - > _count + + ; } ) ,
DelayTime : : create ( delay ) ) ,
50 ) ;
this - > runAction (
Sequence : : createWithTwoActions (
repeatAction ,
CallFunc : : create ( [ & ] ( ) { log ( " after: count = %d " , this - > _count ) ; } )
) ) ;
}
std : : string Issue2599 : : subtitle ( ) const
{
return " See console: You should see '50' " ;
}
std : : string Issue2599 : : title ( ) const
{
return " Issue 2599 " ;
}
2012-06-11 18:25:57 +08:00
/** ActionCatmullRom
*/
void ActionCatmullRom : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
this - > centerSprites ( 2 ) ;
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2012-06-11 18:25:57 +08:00
2013-02-28 15:32:27 +08:00
//
// 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).
//
2014-08-28 11:41:18 +08:00
_tamara - > setPosition ( 50 , 50 ) ;
2013-02-28 15:32:27 +08:00
2013-06-22 03:25:36 +08:00
auto array = PointArray : : create ( 20 ) ;
2012-06-11 18:25:57 +08:00
2019-09-24 11:31:35 +08:00
array - > addControlPoint ( Vec2 ( 0.0f , 0.0f ) ) ;
array - > addControlPoint ( Vec2 ( 80.0f , 80.0f ) ) ;
array - > addControlPoint ( Vec2 ( s . width - 80 , 80.0f ) ) ;
2014-05-15 01:07:09 +08:00
array - > addControlPoint ( Vec2 ( s . width - 80 , s . height - 80 ) ) ;
2019-09-24 11:31:35 +08:00
array - > addControlPoint ( Vec2 ( 80.0f , s . height - 80.0f ) ) ;
array - > addControlPoint ( Vec2 ( 80.0f , 80.0f ) ) ;
2014-05-15 01:07:09 +08:00
array - > addControlPoint ( Vec2 ( s . width / 2 , s . height / 2 ) ) ;
2012-06-11 18:25:57 +08:00
2013-06-22 03:25:36 +08:00
auto action = CatmullRomBy : : create ( 3 , array ) ;
auto reverse = action - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( action , reverse , nullptr ) ;
2013-02-28 15:32:27 +08:00
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( seq ) ;
2013-02-28 15:32:27 +08:00
2014-09-11 15:39:56 +08:00
auto drawNode1 = DrawNode : : create ( ) ;
2019-09-24 11:31:35 +08:00
drawNode1 - > setPosition ( Vec2 ( 50.0f , 50.0f ) ) ;
drawNode1 - > drawCatmullRom ( array , 50 , Color4F ( 1.0f , 0.0f , 1.0f , 1.0f ) ) ;
2014-09-11 15:39:56 +08:00
this - > addChild ( drawNode1 ) ;
2013-02-28 15:32:27 +08:00
//
// 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
//
2012-06-11 18:25:57 +08:00
2013-06-22 03:25:36 +08:00
auto array2 = PointArray : : create ( 20 ) ;
2012-06-11 18:25:57 +08:00
2019-09-24 11:31:35 +08:00
array2 - > addControlPoint ( Vec2 ( s . width / 2 , 30.0f ) ) ;
array2 - > addControlPoint ( Vec2 ( s . width - 80 , 30.0f ) ) ;
2014-05-15 01:07:09 +08:00
array2 - > addControlPoint ( Vec2 ( s . width - 80 , s . height - 80 ) ) ;
array2 - > addControlPoint ( Vec2 ( s . width / 2 , s . height - 80 ) ) ;
2019-09-24 11:31:35 +08:00
array2 - > addControlPoint ( Vec2 ( s . width / 2 , 30.0f ) ) ;
2012-06-11 18:25:57 +08:00
2013-06-22 03:25:36 +08:00
auto action2 = CatmullRomTo : : create ( 3 , array2 ) ;
auto reverse2 = action2 - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
2014-07-10 00:45:27 +08:00
auto seq2 = Sequence : : create ( action2 , reverse2 , nullptr ) ;
2013-02-28 15:32:27 +08:00
2013-06-15 14:03:30 +08:00
_kathia - > runAction ( seq2 ) ;
2012-06-11 18:25:57 +08:00
2014-09-11 15:39:56 +08:00
auto drawNode2 = DrawNode : : create ( ) ;
2019-09-24 11:31:35 +08:00
drawNode2 - > drawCatmullRom ( array2 , 50 , Color4F ( 0.0f , 1.0f , 1.0f , 1.0f ) ) ;
2014-09-11 15:39:56 +08:00
this - > addChild ( drawNode2 ) ;
2012-06-11 18:25:57 +08:00
}
ActionCatmullRom : : ~ ActionCatmullRom ( )
{
}
2013-12-19 05:52:10 +08:00
std : : string ActionCatmullRom : : title ( ) const
2012-06-11 18:25:57 +08:00
{
return " CatmullRomBy / CatmullRomTo " ;
}
2013-12-19 05:52:10 +08:00
std : : string ActionCatmullRom : : subtitle ( ) const
2012-06-11 18:25:57 +08:00
{
return " Catmull Rom spline paths. Testing reverse too " ;
}
/** ActionCardinalSpline
*/
void ActionCardinalSpline : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
2013-02-28 15:32:27 +08:00
2012-06-11 18:25:57 +08:00
this - > centerSprites ( 2 ) ;
2013-02-28 15:32:27 +08:00
2013-07-12 06:24:23 +08:00
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2012-06-11 18:25:57 +08:00
2013-06-22 03:25:36 +08:00
auto array = PointArray : : create ( 20 ) ;
2012-06-11 18:25:57 +08:00
2019-09-24 11:31:35 +08:00
array - > addControlPoint ( Vec2 ( 0.0f , 0.0f ) ) ;
array - > addControlPoint ( Vec2 ( s . width / 2 - 30 , 0.0f ) ) ;
2014-05-15 01:07:09 +08:00
array - > addControlPoint ( Vec2 ( s . width / 2 - 30 , s . height - 80 ) ) ;
2019-09-24 11:31:35 +08:00
array - > addControlPoint ( Vec2 ( 0.0f , s . height - 80 ) ) ;
array - > addControlPoint ( Vec2 ( 0.0f , 0.0f ) ) ;
2012-06-11 18:25:57 +08:00
2013-02-28 15:32:27 +08:00
//
// sprite 1 (By)
//
// Spline with no tension (tension==0)
//
2012-06-11 18:25:57 +08:00
2013-06-22 03:25:36 +08:00
auto action = CardinalSplineBy : : create ( 3 , array , 0 ) ;
auto reverse = action - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
2014-07-10 00:45:27 +08:00
auto seq = Sequence : : create ( action , reverse , nullptr ) ;
2013-02-28 15:32:27 +08:00
2014-08-28 11:41:18 +08:00
_tamara - > setPosition ( 50 , 50 ) ;
2013-06-15 14:03:30 +08:00
_tamara - > runAction ( seq ) ;
2013-02-28 15:32:27 +08:00
2014-09-11 15:39:56 +08:00
auto drawNode1 = DrawNode : : create ( ) ;
2019-09-24 11:31:35 +08:00
drawNode1 - > setPosition ( Vec2 ( 50.0f , 50.0f ) ) ;
drawNode1 - > drawCardinalSpline ( array , 0 , 100 , Color4F ( 1.0f , 0.0f , 1.0f , 1.0f ) ) ;
2014-09-11 15:39:56 +08:00
this - > addChild ( drawNode1 ) ;
2013-02-28 15:32:27 +08:00
//
// sprite 2 (By)
//
// Spline with high tension (tension==1)
//
2012-06-11 18:25:57 +08:00
2013-08-16 16:05:27 +08:00
auto action2 = CardinalSplineBy : : create ( 3 , array , 1 ) ;
2013-06-22 03:25:36 +08:00
auto reverse2 = action2 - > reverse ( ) ;
2013-02-28 15:32:27 +08:00
2014-07-10 00:45:27 +08:00
auto seq2 = Sequence : : create ( action2 , reverse2 , nullptr ) ;
2013-02-28 15:32:27 +08:00
2014-08-28 11:41:18 +08:00
_kathia - > setPosition ( s . width / 2 , 50 ) ;
2013-06-15 14:03:30 +08:00
_kathia - > runAction ( seq2 ) ;
2013-02-28 15:32:27 +08:00
2014-09-11 15:39:56 +08:00
auto drawNode2 = DrawNode : : create ( ) ;
2019-09-24 11:31:35 +08:00
drawNode2 - > setPosition ( Vec2 ( s . width / 2 , 50.0f ) ) ;
drawNode2 - > drawCardinalSpline ( array , 1 , 100 , Color4F ( 1.0f , 0.0f , 1.0f , 1.0f ) ) ;
2014-09-11 15:39:56 +08:00
this - > addChild ( drawNode2 ) ;
2012-06-11 18:25:57 +08:00
}
ActionCardinalSpline : : ~ ActionCardinalSpline ( )
{
}
2013-12-19 05:52:10 +08:00
std : : string ActionCardinalSpline : : title ( ) const
2012-06-11 18:25:57 +08:00
{
2013-02-28 14:42:45 +08:00
return " CardinalSplineBy / CardinalSplineTo " ;
2012-06-11 18:25:57 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionCardinalSpline : : subtitle ( ) const
2012-06-11 18:25:57 +08:00
{
return " Cardinal Spline paths. Testing different tensions for one array " ;
}
/** PauseResumeActions
*/
2012-07-24 11:21:08 +08:00
PauseResumeActions : : PauseResumeActions ( )
{
}
PauseResumeActions : : ~ PauseResumeActions ( )
{
2013-12-07 14:28:37 +08:00
2012-07-24 11:21:08 +08:00
}
2012-06-11 18:25:57 +08:00
void PauseResumeActions : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
2013-02-28 15:32:27 +08:00
2013-03-01 11:25:40 +08:00
this - > centerSprites ( 3 ) ;
2012-06-11 18:25:57 +08:00
2019-09-24 11:31:35 +08:00
_tamara - > runAction ( RepeatForever : : create ( RotateBy : : create ( 3.0f , 360.0f ) ) ) ;
_grossini - > runAction ( RepeatForever : : create ( RotateBy : : create ( 3.0f , - 360.0f ) ) ) ;
_kathia - > runAction ( RepeatForever : : create ( RotateBy : : create ( 3.0f , 360.0f ) ) ) ;
2012-06-11 18:25:57 +08:00
2014-10-04 00:38:36 +08:00
this - > schedule ( [ & ] ( float dt ) {
log ( " Pausing " ) ;
auto director = Director : : getInstance ( ) ;
_pausedTargets = director - > getActionManager ( ) - > pauseAllRunningActions ( ) ;
}
, 3 , false , 0 , " pause_key " ) ;
this - > schedule ( [ & ] ( float dt ) {
log ( " Resuming " ) ;
auto director = Director : : getInstance ( ) ;
director - > getActionManager ( ) - > resumeTargets ( _pausedTargets ) ;
_pausedTargets . clear ( ) ;
}
, 5 , false , 0 , " resume_key " ) ;
2012-06-11 18:25:57 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string PauseResumeActions : : title ( ) const
2012-06-11 18:25:57 +08:00
{
return " PauseResumeActions " ;
}
2013-12-19 05:52:10 +08:00
std : : string PauseResumeActions : : subtitle ( ) const
2012-06-11 18:25:57 +08:00
{
return " All actions pause at 3s and resume at 5s " ;
}
2016-08-16 16:55:31 +08:00
//------------------------------------------------------------------
//
// ActionResize
// Works on all nodes where setContentSize is effective.
// But it's mostly useful for nodes where 9-slice is enabled
//
//------------------------------------------------------------------
void ActionResize : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
_grossini - > setVisible ( false ) ;
_tamara - > setVisible ( false ) ;
_kathia - > setVisible ( false ) ;
Size widgetSize = getContentSize ( ) ;
Text * alert = Text : : create ( " ImageView Content ResizeTo ResizeBy action. \n Top: ResizeTo/ResizeBy on a 9-slice ImageView \n Bottom: ScaleTo/ScaleBy on a 9-slice ImageView (for comparison) " , " fonts/Marker Felt.ttf " , 14 ) ;
alert - > setColor ( Color3B ( 159 , 168 , 176 ) ) ;
alert - > setPosition ( Vec2 ( widgetSize . width / 2.0f ,
widgetSize . height / 2.0f - alert - > getContentSize ( ) . height * 1.125f ) ) ;
addChild ( alert ) ;
// Create the imageview
Vec2 offset ( 0.0f , 50.0f ) ;
ImageView * imageViewResize = ImageView : : create ( " cocosui/buttonHighlighted.png " ) ;
imageViewResize - > setScale9Enabled ( true ) ;
2019-09-24 11:31:35 +08:00
imageViewResize - > setContentSize ( Size ( 50.0f , 40.0f ) ) ;
2016-08-16 16:55:31 +08:00
imageViewResize - > setPosition ( Vec2 ( ( widgetSize . width / 2.0f ) + offset . x ,
( widgetSize . height / 2.0f ) + offset . y ) ) ;
2019-09-24 11:31:35 +08:00
auto resizeDown = cocos2d : : ResizeTo : : create ( 2.8f , Size ( 50.0f , 40.0f ) ) ;
auto resizeUp = cocos2d : : ResizeTo : : create ( 2.8f , Size ( 300.0f , 40.0f ) ) ;
2016-08-16 16:55:31 +08:00
2019-09-24 11:31:35 +08:00
auto resizeByDown = cocos2d : : ResizeBy : : create ( 1.8f , Size ( 0.0f , - 30.0f ) ) ;
auto resizeByUp = cocos2d : : ResizeBy : : create ( 1.8f , Size ( 0.0f , 30.0f ) ) ;
2016-08-16 16:55:31 +08:00
addChild ( imageViewResize ) ;
auto rep = RepeatForever : : create ( Sequence : : create ( resizeUp , resizeDown , resizeByDown , resizeByUp , nullptr ) ) ;
imageViewResize - > runAction ( rep ) ;
// Create another imageview that scale to see the difference
ImageView * imageViewScale = ImageView : : create ( " cocosui/buttonHighlighted.png " ) ;
imageViewScale - > setScale9Enabled ( true ) ;
2019-09-24 11:31:35 +08:00
imageViewScale - > setContentSize ( Size ( 50.0f , 40.0f ) ) ;
2016-08-16 16:55:31 +08:00
imageViewScale - > setPosition ( Vec2 ( widgetSize . width / 2.0f ,
widgetSize . height / 2.0f ) ) ;
auto scaleDownScale = cocos2d : : ScaleTo : : create ( 2.8f , 1.0f ) ;
auto scaleUpScale = cocos2d : : ScaleTo : : create ( 2.8f , 6.0f , 1.0f ) ;
auto scaleByDownScale = cocos2d : : ScaleBy : : create ( 1.8f , 1.0f , 0.25f ) ;
auto scaleByUpScale = cocos2d : : ScaleBy : : create ( 1.8f , 1.0f , 4.0f ) ;
addChild ( imageViewScale ) ;
auto rep2 = RepeatForever : : create ( Sequence : : create ( scaleUpScale , scaleDownScale , scaleByDownScale , scaleByUpScale , nullptr ) ) ;
imageViewScale - > runAction ( rep2 ) ;
}
std : : string ActionResize : : subtitle ( ) const
{
return " ResizeTo / ResizeBy " ;
}
2013-04-01 10:18:26 +08:00
//------------------------------------------------------------------
//
// ActionRemoveSelf
//
//------------------------------------------------------------------
void ActionRemoveSelf : : onEnter ( )
{
ActionsDemo : : onEnter ( ) ;
alignSpritesLeft ( 1 ) ;
2013-06-22 03:25:36 +08:00
auto action = Sequence : : create (
2019-09-24 11:31:35 +08:00
MoveBy : : create ( 2 , Vec2 ( 240.0f , 0.0f ) ) ,
2013-06-20 14:17:10 +08:00
RotateBy : : create ( 2 , 540 ) ,
ScaleTo : : create ( 1 , 0.1f ) ,
RemoveSelf : : create ( ) ,
2014-07-10 00:45:27 +08:00
nullptr ) ;
2013-04-01 10:18:26 +08:00
2013-06-15 14:03:30 +08:00
_grossini - > runAction ( action ) ;
2013-04-01 10:18:26 +08:00
}
2013-12-19 05:52:10 +08:00
std : : string ActionRemoveSelf : : subtitle ( ) const
2013-04-01 10:18:26 +08:00
{
return " Sequence: Move + Rotate + Scale + RemoveSelf " ;
2014-03-26 16:00:55 +08:00
}
2015-04-18 20:35:14 +08:00
//------------------------------------------------------------------
//
// ActionFloat
//
//------------------------------------------------------------------
2015-04-28 17:48:19 +08:00
void ActionFloatTest : : onEnter ( )
2015-04-18 20:35:14 +08:00
{
ActionsDemo : : onEnter ( ) ;
centerSprites ( 3 ) ;
auto s = Director : : getInstance ( ) - > getWinSize ( ) ;
2017-02-10 10:35:52 +08:00
// create float action with duration and from to value, using lambda function we can easily animate any property of the Node.
2015-04-28 17:48:19 +08:00
auto actionFloat = ActionFloat : : create ( 2.f , 0 , 3 , [ this ] ( float value ) {
2015-04-18 20:35:14 +08:00
_tamara - > setScale ( value ) ;
} ) ;
float grossiniY = _grossini - > getPositionY ( ) ;
2015-04-28 17:48:19 +08:00
auto actionFloat1 = ActionFloat : : create ( 3.f , grossiniY , grossiniY + 50 , [ this ] ( float value ) {
2015-04-18 20:35:14 +08:00
_grossini - > setPositionY ( value ) ;
} ) ;
2015-04-28 17:48:19 +08:00
auto actionFloat2 = ActionFloat : : create ( 3.f , 3 , 1 , [ this ] ( float value ) {
_kathia - > setScale ( value ) ;
2015-04-18 20:35:14 +08:00
} ) ;
_tamara - > runAction ( actionFloat ) ;
_grossini - > runAction ( actionFloat1 ) ;
_kathia - > runAction ( actionFloat2 ) ;
}
2017-01-17 09:48:30 +08:00
void Issue14936_1 : : onEnter ( ) {
ActionsDemo : : onEnter ( ) ;
centerSprites ( 0 ) ;
auto origin = cocos2d : : Director : : getInstance ( ) - > getVisibleOrigin ( ) ;
auto visibleSize = cocos2d : : Director : : getInstance ( ) - > getVisibleSize ( ) ;
_count = 0 ;
2017-03-22 14:17:49 +08:00
2017-01-17 09:48:30 +08:00
auto counterLabel = Label : : createWithTTF ( " 0 " , " fonts/Marker Felt.ttf " , 16.0f ) ;
counterLabel - > setPosition ( origin . x + visibleSize . width / 2 , origin . y + visibleSize . height / 2 ) ;
addChild ( counterLabel ) ;
auto func = CallFunc : : create ( [ this , counterLabel ] {
_count + + ;
std : : ostringstream os ;
os < < _count ;
counterLabel - > setString ( os . str ( ) ) ;
} ) ;
runAction ( Spawn : : create ( func , func , nullptr ) ) ;
}
std : : string Issue14936_1 : : subtitle ( ) const {
return " Counter should be equal 2 " ;
}
void Issue14936_2 : : onEnter ( ) {
ActionsDemo : : onEnter ( ) ;
centerSprites ( 0 ) ;
auto origin = cocos2d : : Director : : getInstance ( ) - > getVisibleOrigin ( ) ;
auto visibleSize = cocos2d : : Director : : getInstance ( ) - > getVisibleSize ( ) ;
_count = 0 ;
auto counterLabel = Label : : createWithTTF ( " 0 " , " fonts/Marker Felt.ttf " , 16.0f ) ;
counterLabel - > setPosition ( origin . x + visibleSize . width / 2 , origin . y + visibleSize . height / 2 ) ;
addChild ( counterLabel ) ;
auto func = CallFunc : : create ( [ this , counterLabel ] {
_count + + ;
std : : ostringstream os ;
os < < _count ;
counterLabel - > setString ( os . str ( ) ) ;
} ) ;
runAction ( Sequence : : create ( TargetedAction : : create ( this , func ) , DelayTime : : create ( 0.2f ) , nullptr ) ) ;
}
std : : string Issue14936_2 : : subtitle ( ) const {
return " Counter should be equal 1 " ;
}
std : : string Issue14936_2 : : title ( ) const {
return " Issue 14936 - Sequence " ;
}
std : : string Issue14936_1 : : title ( ) const {
return " Issue 14936 - Action Interval " ;
}
2015-04-28 17:48:19 +08:00
std : : string ActionFloatTest : : subtitle ( ) const
2015-04-18 20:35:14 +08:00
{
return " ActionFloat " ;
}
2017-03-07 09:36:09 +08:00
//------------------------------------------------------------------
//
// SequenceWithFinalInstant
//
//------------------------------------------------------------------
void SequenceWithFinalInstant : : onEnter ( )
{
2017-07-03 09:15:53 +08:00
TestCase : : onEnter ( ) ;
2017-03-07 09:36:09 +08:00
_manager = new cocos2d : : ActionManager ( ) ;
_target = cocos2d : : Node : : create ( ) ;
_target - > setActionManager ( _manager ) ;
_target - > retain ( ) ;
_target - > onEnter ( ) ;
bool called ( false ) ;
const auto f
( [ & called ] ( ) - > void
{
cocos2d : : log ( " Callback called. " ) ;
called = true ;
} ) ;
const auto action =
cocos2d : : Sequence : : create
( cocos2d : : DelayTime : : create ( 0.05 ) ,
cocos2d : : CallFunc : : create ( f ) ,
nullptr ) ;
_target - > runAction ( action ) ;
_manager - > update ( 0 ) ;
_manager - > update ( 0.05 - FLT_EPSILON ) ;
if ( action - > isDone ( ) & & ! called )
2017-07-03 09:15:53 +08:00
assert ( false ) ;
2017-03-22 14:17:49 +08:00
_manager - > update ( FLT_EPSILON ) ;
2017-07-03 09:15:53 +08:00
if ( action - > isDone ( ) & & ! called )
assert ( false ) ;
2017-03-07 09:36:09 +08:00
}
void SequenceWithFinalInstant : : onExit ( )
{
2017-07-03 09:15:53 +08:00
TestCase : : onExit ( ) ;
_target - > onExit ( ) ;
_target - > release ( ) ;
_manager - > release ( ) ;
2017-03-07 09:36:09 +08:00
}
std : : string SequenceWithFinalInstant : : subtitle ( ) const
{
2017-07-03 09:15:53 +08:00
return " Instant action should not crash " ;
}
//------------------------------------------------------------------
//
// Issue18003
//
//------------------------------------------------------------------
void Issue18003 : : onEnter ( )
{
TestCase : : onEnter ( ) ;
_manager = new ActionManager ( ) ;
_target = Node : : create ( ) ;
_target - > setActionManager ( _manager ) ;
_target - > retain ( ) ;
_target - > onEnter ( ) ;
// instant action + interval action
const auto f
( [ ] ( ) - > void
{
// do nothing
} ) ;
auto action = Sequence : : create ( CallFunc : : create ( f ) ,
DelayTime : : create ( 1 ) ,
nullptr ) ;
_target - > runAction ( action ) ;
_manager - > update ( 0 ) ;
_manager - > update ( 2 ) ;
assert ( action - > isDone ( ) ) ;
_target - > stopAction ( action ) ;
// instant action + instant action
action = Sequence : : create ( CallFunc : : create ( f ) ,
CallFunc : : create ( f ) ,
nullptr ) ;
_target - > runAction ( action ) ;
_manager - > update ( 0 ) ;
_manager - > update ( 1 ) ;
assert ( action - > isDone ( ) ) ;
_target - > stopAction ( action ) ;
// interval action + instant action
action = Sequence : : create ( DelayTime : : create ( 1 ) ,
CallFunc : : create ( f ) ,
nullptr ) ;
_target - > runAction ( action ) ;
_manager - > update ( 0 ) ;
_manager - > update ( 2 ) ;
assert ( action - > isDone ( ) ) ;
_target - > stopAction ( action ) ;
// interval action + interval action
action = Sequence : : create ( DelayTime : : create ( 1 ) , DelayTime : : create ( 1 ) , nullptr ) ;
_target - > runAction ( action ) ;
_manager - > update ( 0 ) ;
_manager - > update ( 3 ) ;
assert ( action - > isDone ( ) ) ;
_target - > stopAction ( action ) ;
}
void Issue18003 : : onExit ( )
{
TestCase : : onExit ( ) ;
_target - > onExit ( ) ;
_target - > release ( ) ;
_manager - > release ( ) ;
}
std : : string Issue18003 : : subtitle ( ) const
{
return " issue18003: should not crash " ;
2017-03-07 09:36:09 +08:00
}