2010-11-12 17:26:01 +08:00
|
|
|
/****************************************************************************
|
2012-02-02 10:39:19 +08:00
|
|
|
Copyright (c) 2008-2010 Ricardo Quesada
|
2014-01-22 02:10:50 +08:00
|
|
|
Copyright (c) 2009 Valentin Milea
|
|
|
|
Copyright (c) 2010-2012 cocos2d-x.org
|
|
|
|
Copyright (c) 2011 Zynga Inc.
|
|
|
|
Copyright (c) 2013-2014 Chukong Technologies Inc.
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2012-02-02 10:39:19 +08:00
|
|
|
http://www.cocos2d-x.org
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2012-02-02 10:39:19 +08:00
|
|
|
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:
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2012-02-02 10:39:19 +08:00
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
|
all copies or substantial portions of the Software.
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2012-02-02 10:39:19 +08:00
|
|
|
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.
|
|
|
|
****************************************************************************/
|
2010-07-07 15:15:30 +08:00
|
|
|
|
2014-02-20 10:53:49 +08:00
|
|
|
#ifndef __CCNODE_H__
|
|
|
|
#define __CCNODE_H__
|
2010-07-08 10:25:52 +08:00
|
|
|
|
2010-07-14 11:18:05 +08:00
|
|
|
#include "ccMacros.h"
|
2013-10-14 14:01:00 +08:00
|
|
|
#include "CCAffineTransform.h"
|
|
|
|
#include "CCArray.h"
|
2010-12-24 15:04:26 +08:00
|
|
|
#include "CCGL.h"
|
2013-10-14 14:01:00 +08:00
|
|
|
#include "ccGLStateCache.h"
|
|
|
|
#include "CCGLProgram.h"
|
|
|
|
#include "CCScriptSupport.h"
|
2013-02-27 09:38:30 +08:00
|
|
|
#include "CCProtocols.h"
|
2013-10-14 14:01:00 +08:00
|
|
|
#include "CCEventDispatcher.h"
|
2013-11-28 16:02:03 +08:00
|
|
|
#include "CCVector.h"
|
2013-12-07 09:42:16 +08:00
|
|
|
#include "kazmath/kazmath.h"
|
2010-07-07 15:15:30 +08:00
|
|
|
|
2012-03-23 17:31:28 +08:00
|
|
|
NS_CC_BEGIN
|
|
|
|
|
2013-06-20 14:13:12 +08:00
|
|
|
class GridBase;
|
|
|
|
class Point;
|
|
|
|
class Touch;
|
|
|
|
class Action;
|
|
|
|
class LabelProtocol;
|
|
|
|
class Scheduler;
|
|
|
|
class ActionManager;
|
|
|
|
class Component;
|
|
|
|
class ComponentContainer;
|
2013-09-03 18:22:03 +08:00
|
|
|
class EventDispatcher;
|
2013-12-22 04:28:49 +08:00
|
|
|
class Scene;
|
2014-02-28 13:43:54 +08:00
|
|
|
class Renderer;
|
2013-12-26 23:55:05 +08:00
|
|
|
#if CC_USE_PHYSICS
|
2013-09-30 13:02:17 +08:00
|
|
|
class PhysicsBody;
|
|
|
|
#endif
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2012-06-20 18:09:11 +08:00
|
|
|
/**
|
|
|
|
* @addtogroup base_nodes
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
2012-03-23 17:31:28 +08:00
|
|
|
enum {
|
2013-06-20 14:13:12 +08:00
|
|
|
kNodeOnEnter,
|
|
|
|
kNodeOnExit,
|
|
|
|
kNodeOnEnterTransitionDidFinish,
|
|
|
|
kNodeOnExitTransitionDidStart,
|
|
|
|
kNodeOnCleanup
|
2012-03-23 17:31:28 +08:00
|
|
|
};
|
|
|
|
|
2014-01-22 01:26:58 +08:00
|
|
|
bool nodeComparisonLess(Node* n1, Node* n2);
|
2013-09-01 06:18:28 +08:00
|
|
|
|
2013-09-14 09:02:49 +08:00
|
|
|
class EventListener;
|
|
|
|
|
2013-11-12 12:21:01 +08:00
|
|
|
/** @brief Node is the base element of the Scene Graph. Element of the Scene Graph must be Node objects or subclasses of it.
|
|
|
|
The most common Node objects are: Scene, Layer, Sprite, Menu.
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-06-20 14:13:12 +08:00
|
|
|
The main features of a Node are:
|
2013-11-12 12:21:01 +08:00
|
|
|
- They can contain other Node objects (`addChild`, `getChildByTag`, `removeChild`, etc)
|
|
|
|
- They can schedule periodic callback (`schedule`, `unschedule`, etc)
|
|
|
|
- They can execute actions (`runAction`, `stopAction`, etc)
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-12 12:21:01 +08:00
|
|
|
Some Node objects provide extra functionality for them or their children.
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-06-20 14:13:12 +08:00
|
|
|
Subclassing a Node usually means (one/all) of:
|
2012-03-23 17:31:28 +08:00
|
|
|
- overriding init to initialize resources and schedule callbacks
|
|
|
|
- create callbacks to handle the advancement of time
|
|
|
|
- overriding draw to render the node
|
|
|
|
|
2013-11-12 12:21:01 +08:00
|
|
|
Properties of Node:
|
2012-03-23 17:31:28 +08:00
|
|
|
- position
|
|
|
|
- scale (x, y)
|
|
|
|
- rotation (in degrees, clockwise)
|
2013-06-20 14:13:12 +08:00
|
|
|
- GridBase (to do mesh transformations)
|
2012-03-23 17:31:28 +08:00
|
|
|
- anchor point
|
|
|
|
- size
|
|
|
|
- visible
|
|
|
|
- z-order
|
|
|
|
- openGL z position
|
|
|
|
|
|
|
|
Default values:
|
|
|
|
- rotation: 0
|
|
|
|
- position: (x=0,y=0)
|
|
|
|
- scale: (x=1,y=1)
|
|
|
|
- contentSize: (x=0,y=0)
|
|
|
|
- anchorPoint: (x=0,y=0)
|
|
|
|
|
|
|
|
Limitations:
|
2013-11-12 12:21:01 +08:00
|
|
|
- A Node is a "invisible" object. If you want to draw something on the screen, you should use a Sprite instead. Or subclass Node and override `draw`.
|
2012-03-23 17:31:28 +08:00
|
|
|
|
|
|
|
Order in transformations with grid disabled
|
|
|
|
-# The node will be translated (position)
|
|
|
|
-# The node will be rotated (rotation)
|
|
|
|
-# The node will be scaled (scale)
|
|
|
|
|
|
|
|
Order in transformations with grid enabled
|
|
|
|
-# The node will be translated (position)
|
|
|
|
-# The node will be rotated (rotation)
|
|
|
|
-# The node will be scaled (scale)
|
|
|
|
-# The grid will capture the screen
|
|
|
|
-# The grid will render the captured screen
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
2014-02-20 10:53:49 +08:00
|
|
|
class CC_DLL Node : public Ref
|
2012-03-23 17:31:28 +08:00
|
|
|
{
|
2013-01-17 11:20:25 +08:00
|
|
|
public:
|
2013-08-29 03:42:25 +08:00
|
|
|
/// Default tag used for all the nodes
|
|
|
|
static const int INVALID_TAG = -1;
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
2013-09-03 18:22:03 +08:00
|
|
|
/// @name Constructor, Destructor and Initializers
|
2013-07-16 03:43:22 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Allocates and initializes a node.
|
|
|
|
* @return A initialized node which is marked as "autorelease".
|
|
|
|
*/
|
|
|
|
static Node * create(void);
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Gets the description string. It makes debugging easier.
|
2013-12-13 06:30:22 +08:00
|
|
|
* @return A string
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-12-13 06:30:22 +08:00
|
|
|
virtual std::string getDescription() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end of initializers
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
|
|
|
/// @name Setters & Getters for Graphic Peroperties
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
2014-01-19 03:35:27 +08:00
|
|
|
LocalZOrder is the 'key' used to sort the node relative to its siblings.
|
|
|
|
|
|
|
|
The Node's parent will sort all its children based ont the LocalZOrder value.
|
|
|
|
If two nodes have the same LocalZOrder, then the node that was added first to the children's array will be in front of the other node in the array.
|
|
|
|
|
|
|
|
Also, the Scene Graph is traversed using the "In-Order" tree traversal algorithm ( http://en.wikipedia.org/wiki/Tree_traversal#In-order )
|
|
|
|
And Nodes that have LocalZOder values < 0 are the "left" subtree
|
|
|
|
While Nodes with LocalZOder >=0 are the "right" subtree.
|
|
|
|
|
|
|
|
@see `setGlobalZOrder`
|
|
|
|
@see `setVertexZ`
|
|
|
|
*/
|
2014-01-22 01:26:58 +08:00
|
|
|
virtual void setLocalZOrder(int localZOrder);
|
2014-01-19 03:35:27 +08:00
|
|
|
|
2014-01-22 01:26:58 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE virtual void setZOrder(int localZOrder) { setLocalZOrder(localZOrder); }
|
2014-01-19 03:35:27 +08:00
|
|
|
/* Helper function used by `setLocalZOrder`. Don't use it unless you know what you are doing.
|
|
|
|
*/
|
|
|
|
virtual void _setLocalZOrder(int z);
|
|
|
|
/**
|
|
|
|
* Gets the local Z order of this node.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2014-01-19 03:35:27 +08:00
|
|
|
* @see `setLocalZOrder(int)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2014-01-19 03:35:27 +08:00
|
|
|
* @return The local (relative to its siblings) Z order.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2014-01-19 03:35:27 +08:00
|
|
|
virtual int getLocalZOrder() const { return _localZOrder; }
|
|
|
|
CC_DEPRECATED_ATTRIBUTE virtual int getZOrder() const { return getLocalZOrder(); }
|
|
|
|
|
|
|
|
/**
|
|
|
|
Defines the oder in which the nodes are renderer.
|
|
|
|
Nodes that have a Global Z Order lower, are renderer first.
|
|
|
|
|
|
|
|
In case two or more nodes have the same Global Z Order, the oder is not guaranteed.
|
|
|
|
The only exception if the Nodes have a Global Z Order == 0. In that case, the Scene Graph order is used.
|
|
|
|
|
|
|
|
By default, all nodes have a Global Z Order = 0. That means that by default, the Scene Graph order is used to render the nodes.
|
|
|
|
|
|
|
|
Global Z Order is useful when you need to render nodes in an order different than the Scene Graph order.
|
|
|
|
|
|
|
|
Limitations: Global Z Order can't be used used by Nodes that have SpriteBatchNode as one of their acenstors.
|
|
|
|
And if ClippingNode is one of the ancestors, then "global Z order" will be relative to the ClippingNode.
|
|
|
|
|
|
|
|
@see `setLocalZOrder()`
|
|
|
|
@see `setVertexZ()`
|
|
|
|
|
|
|
|
@since v3.0
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2014-01-22 02:10:50 +08:00
|
|
|
virtual void setGlobalZOrder(float globalZOrder);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
2014-01-19 03:35:27 +08:00
|
|
|
* Returns the Node's Global Z Order.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2014-01-19 03:35:27 +08:00
|
|
|
* @see `setGlobalZOrder(int)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2014-01-19 03:35:27 +08:00
|
|
|
* @return The node's global Z order
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2014-01-19 03:35:27 +08:00
|
|
|
virtual float getGlobalZOrder() const { return _globalZOrder; }
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Changes the scale factor on X axis of this node
|
|
|
|
*
|
|
|
|
* The deafult value is 1.0 if you haven't changed it before
|
|
|
|
*
|
2013-07-27 21:44:49 +08:00
|
|
|
* @param scaleX The scale factor on X axis.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-27 21:44:49 +08:00
|
|
|
virtual void setScaleX(float scaleX);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns the scale factor on X axis of this node
|
|
|
|
*
|
|
|
|
* @see setScaleX(float)
|
|
|
|
*
|
|
|
|
* @return The scale factor on X axis.
|
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual float getScaleX() const;
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Changes the scale factor on Y axis of this node
|
|
|
|
*
|
|
|
|
* The Default value is 1.0 if you haven't changed it before.
|
|
|
|
*
|
2013-07-27 21:44:49 +08:00
|
|
|
* @param scaleY The scale factor on Y axis.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-27 21:44:49 +08:00
|
|
|
virtual void setScaleY(float scaleY);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns the scale factor on Y axis of this node
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setScaleY(float)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-11-30 01:09:38 +08:00
|
|
|
* @return The scale factor on Y axis.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual float getScaleY() const;
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2014-02-23 11:16:42 +08:00
|
|
|
/**
|
|
|
|
* Changes the scale factor on Z axis of this node
|
|
|
|
*
|
|
|
|
* The Default value is 1.0 if you haven't changed it before.
|
|
|
|
*
|
|
|
|
* @param scaleY The scale factor on Y axis.
|
|
|
|
*/
|
|
|
|
virtual void setScaleZ(float scaleZ);
|
|
|
|
/**
|
|
|
|
* Returns the scale factor on Z axis of this node
|
|
|
|
*
|
|
|
|
* @see `setScaleZ(float)`
|
|
|
|
*
|
|
|
|
* @return The scale factor on Z axis.
|
|
|
|
*/
|
|
|
|
virtual float getScaleZ() const;
|
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Changes both X and Y scale factor of the node.
|
|
|
|
*
|
|
|
|
* 1.0 is the default scale factor. It modifies the X and Y scale at the same time.
|
|
|
|
*
|
|
|
|
* @param scale The scale factor for both X and Y axis.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-01-17 11:20:25 +08:00
|
|
|
virtual void setScale(float scale);
|
|
|
|
/**
|
|
|
|
* Gets the scale factor of the node, when X and Y have the same scale factor.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @warning Assert when `_scaleX != _scaleY`
|
2013-01-17 11:20:25 +08:00
|
|
|
* @see setScale(float)
|
|
|
|
*
|
|
|
|
* @return The scale factor of the node.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual float getScale() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-10-08 15:57:34 +08:00
|
|
|
/**
|
|
|
|
* Changes both X and Y scale factor of the node.
|
|
|
|
*
|
|
|
|
* 1.0 is the default scale factor. It modifies the X and Y scale at the same time.
|
|
|
|
*
|
|
|
|
* @param scaleX The scale factor on X axis.
|
|
|
|
* @param scaleY The scale factor on Y axis.
|
|
|
|
*/
|
|
|
|
virtual void setScale(float scaleX,float scaleY);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Changes the position (x,y) of the node in OpenGL coordinates
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* Usually we use `Point(x,y)` to compose Point object.
|
2013-01-17 11:20:25 +08:00
|
|
|
* The original point (0,0) is at the left-bottom corner of screen.
|
|
|
|
* For example, this codesnip sets the node in the center of screen.
|
2013-11-12 12:21:01 +08:00
|
|
|
@code
|
|
|
|
Size size = Director::getInstance()->getWinSize();
|
|
|
|
node->setPosition( Point(size.width/2, size.height/2) )
|
|
|
|
@endcode
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @param position The position (x,y) of the node in OpenGL coordinates
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
virtual void setPosition(const Point &position);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Gets the position (x,y) of the node in OpenGL coordinates
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* @see setPosition(const Point&)
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The position (x,y) of the node in OpenGL coordinates
|
2013-09-13 11:41:20 +08:00
|
|
|
* @code
|
|
|
|
* In js and lua return value is table which contains x,y
|
|
|
|
* @endcode
|
2012-04-19 14:35:52 +08:00
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual const Point& getPosition() const;
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Sets position in a more efficient way.
|
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* Passing two numbers (x,y) is much efficient than passing Point object.
|
2013-11-30 01:09:38 +08:00
|
|
|
* This method is binded to lua and javascript.
|
2013-01-17 11:20:25 +08:00
|
|
|
* Passing a number is 10 times faster than passing a object from lua to c++
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
@code
|
|
|
|
// sample code in lua
|
|
|
|
local pos = node::getPosition() -- returns Point object from C++
|
|
|
|
node:setPosition(x, y) -- pass x, y coordinate to C++
|
|
|
|
@endcode
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @param x X coordinate for position
|
|
|
|
* @param y Y coordinate for position
|
|
|
|
*/
|
2013-03-20 08:35:52 +08:00
|
|
|
virtual void setPosition(float x, float y);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Gets position in a more efficient way, returns two number instead of a Point object
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setPosition(float, float)`
|
2013-09-13 11:41:20 +08:00
|
|
|
* In js,out value not return
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual void getPosition(float* x, float* y) const;
|
2013-01-21 16:26:02 +08:00
|
|
|
/**
|
|
|
|
* Gets/Sets x or y coordinate individually for position.
|
|
|
|
* These methods are used in Lua and Javascript Bindings
|
|
|
|
*/
|
2013-03-20 08:35:52 +08:00
|
|
|
virtual void setPositionX(float x);
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual float getPositionX(void) const;
|
2013-03-20 08:35:52 +08:00
|
|
|
virtual void setPositionY(float y);
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual float getPositionY(void) const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-02-23 17:09:52 +08:00
|
|
|
/**
|
|
|
|
* Sets the X, Y, and Z axis position
|
|
|
|
*/
|
2014-02-23 11:16:42 +08:00
|
|
|
virtual void setPosition3D(const Vertex3F& position);
|
2014-02-23 17:09:52 +08:00
|
|
|
/**
|
|
|
|
* returns the X, Y and Z axis position
|
|
|
|
*/
|
2014-02-23 11:16:42 +08:00
|
|
|
virtual Vertex3F getPosition3D() const;
|
2014-02-23 17:09:52 +08:00
|
|
|
|
2014-02-23 11:16:42 +08:00
|
|
|
/**
|
|
|
|
* Sets the 'z' axis in the position. It is the OpenGL Z vertex value.
|
|
|
|
*
|
|
|
|
* The OpenGL depth buffer and depth testing are disabled by default. You need to turn them on
|
|
|
|
* in order to use this property correctly.
|
|
|
|
*
|
|
|
|
* `setPositionZ()` also sets the `setGlobalZValue()` with the positionZ as value.
|
|
|
|
*
|
|
|
|
* @see `setGlobalZValue()`
|
|
|
|
*
|
|
|
|
* @param vertexZ OpenGL Z vertex of this node.
|
|
|
|
*/
|
|
|
|
virtual void setPositionZ(float positionZ);
|
|
|
|
CC_DEPRECATED_ATTRIBUTE virtual void setVertexZ(float vertexZ) { setPositionZ(vertexZ); }
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets position Z axis of this node.
|
|
|
|
*
|
|
|
|
* @see setPositionZ(float)
|
|
|
|
*
|
|
|
|
* @return the position Z axis of this node.
|
|
|
|
*/
|
|
|
|
virtual float getPositionZ() const;
|
|
|
|
CC_DEPRECATED_ATTRIBUTE virtual float getVertexZ() const { return getPositionZ(); }
|
|
|
|
|
|
|
|
/** Sets the position using normalized coordinates.
|
|
|
|
- (0,0) means bottom,left corner
|
|
|
|
- (1,1) means top,right corner
|
|
|
|
- (0.5,0.5) means center
|
|
|
|
*/
|
|
|
|
virtual void setNormalizedPosition(const Point& position);
|
|
|
|
/** returns the normalized position */
|
|
|
|
const Point& getNormalizedPosition() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Changes the X skew angle of the node in degrees.
|
|
|
|
*
|
2014-02-23 17:09:52 +08:00
|
|
|
* The difference between `setRotationalSkew()` and `setSkew()` is that the first one simulate Flash's skew functionality
|
|
|
|
* while the second one uses the real skew funciton.
|
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* This angle describes the shear distortion in the X direction.
|
|
|
|
* Thus, it is the angle between the Y axis and the left edge of the shape
|
|
|
|
* The default skewX angle is 0. Positive values distort the node in a CW direction.
|
|
|
|
*
|
2014-02-23 17:09:52 +08:00
|
|
|
* @param skewX The X skew angle of the node in degrees.
|
2012-11-14 18:05:15 +08:00
|
|
|
*/
|
2014-02-23 17:09:52 +08:00
|
|
|
virtual void setSkewX(float skewX);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns the X skew angle of the node in degrees.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setSkewX(float)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The X skew angle of the node in degrees.
|
2012-04-19 14:35:52 +08:00
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual float getSkewX() const;
|
2013-01-17 11:20:25 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Changes the Y skew angle of the node in degrees.
|
|
|
|
*
|
2014-02-23 17:09:52 +08:00
|
|
|
* The difference between `setRotationalSkew()` and `setSkew()` is that the first one simulate Flash's skew functionality
|
|
|
|
* while the second one uses the real skew funciton.
|
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* This angle describes the shear distortion in the Y direction.
|
|
|
|
* Thus, it is the angle between the X axis and the bottom edge of the shape
|
|
|
|
* The default skewY angle is 0. Positive values distort the node in a CCW direction.
|
|
|
|
*
|
2014-02-23 17:09:52 +08:00
|
|
|
* @param skewY The Y skew angle of the node in degrees.
|
2012-04-19 14:35:52 +08:00
|
|
|
*/
|
2014-02-23 17:09:52 +08:00
|
|
|
virtual void setSkewY(float skewY);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns the Y skew angle of the node in degrees.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setSkewY(float)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The Y skew angle of the node in degrees.
|
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual float getSkewY() const;
|
2013-01-17 11:20:25 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Sets the anchor point in percent.
|
|
|
|
*
|
|
|
|
* anchorPoint is the point around which all transformations and positioning manipulations take place.
|
|
|
|
* It's like a pin in the node where it is "attached" to its parent.
|
|
|
|
* The anchorPoint is normalized, like a percentage. (0,0) means the bottom-left corner and (1,1) means the top-right corner.
|
|
|
|
* But you can use values higher than (1,1) and lower than (0,0) too.
|
|
|
|
* The default anchorPoint is (0.5,0.5), so it starts in the center of the node.
|
|
|
|
*
|
|
|
|
* @param anchorPoint The anchor point of node.
|
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
virtual void setAnchorPoint(const Point& anchorPoint);
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Returns the anchor point in percent.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setAnchorPoint(const Point&)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The anchor point of node.
|
2012-11-14 18:05:15 +08:00
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual const Point& getAnchorPoint() const;
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns the anchorPoint in absolute pixels.
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* @warning You can only read it. If you wish to modify it, use anchorPoint instead.
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `getAnchorPoint()`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The anchor point in absolute pixels.
|
2012-11-14 18:05:15 +08:00
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual const Point& getAnchorPointInPoints() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Sets the untransformed size of the node.
|
|
|
|
*
|
|
|
|
* The contentSize remains the same no matter the node is scaled or rotated.
|
|
|
|
* All nodes has a size. Layer and Scene has the same size of the screen.
|
|
|
|
*
|
|
|
|
* @param contentSize The untransformed size of the node.
|
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
virtual void setContentSize(const Size& contentSize);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns the untransformed size of the node.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setContentSize(const Size&)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The untransformed size of the node.
|
2012-11-14 18:05:15 +08:00
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
virtual const Size& getContentSize() const;
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Sets whether the node is visible
|
|
|
|
*
|
|
|
|
* The default value is true, a node is default to visible
|
|
|
|
*
|
|
|
|
* @param visible true if the node is visible, false if the node is hidden.
|
2012-11-14 18:05:15 +08:00
|
|
|
*/
|
2013-01-17 11:20:25 +08:00
|
|
|
virtual void setVisible(bool visible);
|
|
|
|
/**
|
|
|
|
* Determines if the node is visible
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setVisible(bool)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return true if the node is visible, false if the node is hidden.
|
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual bool isVisible() const;
|
2013-01-17 11:20:25 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the rotation (angle) of the node in degrees.
|
|
|
|
*
|
|
|
|
* 0 is the default rotation angle.
|
2013-01-17 11:20:25 +08:00
|
|
|
* Positive values rotate node clockwise, and negative values for anti-clockwise.
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-06-21 13:47:29 +08:00
|
|
|
* @param rotation The rotation of the node in degrees.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-06-21 13:47:29 +08:00
|
|
|
virtual void setRotation(float rotation);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns the rotation of the node in degrees.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setRotation(float)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The rotation of the node in degrees.
|
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual float getRotation() const;
|
2013-01-17 11:20:25 +08:00
|
|
|
|
2014-02-23 17:09:52 +08:00
|
|
|
/**
|
|
|
|
* Sets the X, Y and Z axis rotation
|
|
|
|
* Useful for 3d rotations
|
|
|
|
*/
|
2014-02-23 11:16:42 +08:00
|
|
|
virtual void setRotation3D(const Vertex3F& rotation);
|
2014-02-23 17:09:52 +08:00
|
|
|
/**
|
|
|
|
* returns the X, Y and Z axis rotation
|
|
|
|
*/
|
2014-02-23 11:16:42 +08:00
|
|
|
virtual Vertex3F getRotation3D() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Sets the X rotation (angle) of the node in degrees which performs a horizontal rotational skew.
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2014-02-23 17:09:52 +08:00
|
|
|
* The difference between setRotationalSkew() and setSkew() is that the first one simulate Flash's skew functionality
|
|
|
|
* while the second one uses the real skew funciton.
|
|
|
|
*
|
2013-11-30 01:09:38 +08:00
|
|
|
* 0 is the default rotation angle.
|
2013-01-17 11:20:25 +08:00
|
|
|
* Positive values rotate node clockwise, and negative values for anti-clockwise.
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-08-01 17:47:37 +08:00
|
|
|
* @param rotationX The X rotation in degrees which performs a horizontal rotational skew.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2014-02-23 11:16:42 +08:00
|
|
|
virtual void setRotationSkewX(float rotationX);
|
|
|
|
CC_DEPRECATED_ATTRIBUTE virtual void setRotationX(float rotationX) { return setRotationSkewX(rotationX); }
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Gets the X rotation (angle) of the node in degrees which performs a horizontal rotation skew.
|
|
|
|
*
|
2014-02-23 11:16:42 +08:00
|
|
|
* @see `setRotationSkewX(float)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The X rotation in degrees.
|
|
|
|
*/
|
2014-02-23 11:16:42 +08:00
|
|
|
virtual float getRotationSkewX() const;
|
|
|
|
CC_DEPRECATED_ATTRIBUTE virtual float getRotationX() const { return getRotationSkewX(); }
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Sets the Y rotation (angle) of the node in degrees which performs a vertical rotational skew.
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2014-02-23 17:09:52 +08:00
|
|
|
* The difference between setRotationalSkew() and setSkew() is that the first one simulate Flash's skew functionality
|
|
|
|
* while the second one uses the real skew funciton.
|
|
|
|
*
|
2013-11-30 01:09:38 +08:00
|
|
|
* 0 is the default rotation angle.
|
2013-01-17 11:20:25 +08:00
|
|
|
* Positive values rotate node clockwise, and negative values for anti-clockwise.
|
|
|
|
*
|
2013-08-01 17:47:37 +08:00
|
|
|
* @param rotationY The Y rotation in degrees.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2014-02-23 11:16:42 +08:00
|
|
|
virtual void setRotationSkewY(float rotationY);
|
|
|
|
CC_DEPRECATED_ATTRIBUTE virtual void setRotationY(float rotationY) { return setRotationSkewY(rotationY); }
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Gets the Y rotation (angle) of the node in degrees which performs a vertical rotational skew.
|
|
|
|
*
|
2014-02-23 11:16:42 +08:00
|
|
|
* @see `setRotationSkewY(float)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The Y rotation in degrees.
|
|
|
|
*/
|
2014-02-23 11:16:42 +08:00
|
|
|
virtual float getRotationSkewY() const;
|
|
|
|
CC_DEPRECATED_ATTRIBUTE virtual float getRotationY() const { return getRotationSkewY(); }
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Sets the arrival order when this node has a same ZOrder with other children.
|
|
|
|
*
|
|
|
|
* A node which called addChild subsequently will take a larger arrival order,
|
|
|
|
* If two children have the same Z order, the child with larger arrival order will be drawn later.
|
|
|
|
*
|
2014-01-22 01:26:58 +08:00
|
|
|
* @warning This method is used internally for localZOrder sorting, don't change this manually
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-07-20 13:01:27 +08:00
|
|
|
* @param orderOfArrival The arrival order.
|
2012-06-14 15:13:16 +08:00
|
|
|
*/
|
2014-01-22 01:26:58 +08:00
|
|
|
void setOrderOfArrival(int orderOfArrival);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns the arrival order, indecates which children is added previously.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setOrderOfArrival(unsigned int)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The arrival order.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2014-01-22 01:26:58 +08:00
|
|
|
int getOrderOfArrival() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
/** @deprecated No longer needed
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
|
|
|
*/
|
2013-07-26 09:42:53 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE void setGLServerState(int serverState) { /* ignore */ };
|
2013-09-13 11:41:20 +08:00
|
|
|
/** @deprecated No longer needed
|
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
|
|
|
*/
|
2013-07-26 09:42:53 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE int getGLServerState() const { return 0; }
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Sets whether the anchor point will be (0,0) when you position this node.
|
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* This is an internal method, only used by Layer and Scene. Don't call it outside framework.
|
|
|
|
* The default value is false, while in Layer and Scene are true
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @param ignore true if anchor point will be (0,0) when you position this node
|
|
|
|
* @todo This method shoud be renamed as setIgnoreAnchorPointForPosition(bool) or something with "set"
|
2012-04-19 14:35:52 +08:00
|
|
|
*/
|
2013-01-17 11:20:25 +08:00
|
|
|
virtual void ignoreAnchorPointForPosition(bool ignore);
|
|
|
|
/**
|
|
|
|
* Gets whether the anchor point will be (0,0) when you position this node.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `ignoreAnchorPointForPosition(bool)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return true if the anchor point will be (0,0) when you position this node.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual bool isIgnoreAnchorPointForPosition() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end of Setters & Getters for Graphic Peroperties
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
|
|
|
/// @name Children and Parent
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Adds a child to the container with z-order as 0.
|
|
|
|
*
|
|
|
|
* If the child is added to a 'running' node, then 'onEnter' and 'onEnterTransitionDidFinish' will be called immediately.
|
|
|
|
*
|
|
|
|
* @param child A child node
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
virtual void addChild(Node * child);
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2014-01-22 01:26:58 +08:00
|
|
|
* Adds a child to the container with a local z-order
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* If the child is added to a 'running' node, then 'onEnter' and 'onEnterTransitionDidFinish' will be called immediately.
|
|
|
|
*
|
|
|
|
* @param child A child node
|
2014-01-22 01:26:58 +08:00
|
|
|
* @param zOrder Z order for drawing priority. Please refer to `setLocalZOrder(int)`
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2014-01-22 01:26:58 +08:00
|
|
|
virtual void addChild(Node * child, int localZOrder);
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Adds a child to the container with z order and tag
|
|
|
|
*
|
|
|
|
* If the child is added to a 'running' node, then 'onEnter' and 'onEnterTransitionDidFinish' will be called immediately.
|
|
|
|
*
|
|
|
|
* @param child A child node
|
2014-01-22 01:26:58 +08:00
|
|
|
* @param zOrder Z order for drawing priority. Please refer to setLocalZOrder(int)
|
2013-01-17 11:20:25 +08:00
|
|
|
* @param tag A interger to identify the node easily. Please refer to setTag(int)
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2014-01-22 01:26:58 +08:00
|
|
|
virtual void addChild(Node* child, int localZOrder, int tag);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Gets a child from the container with its tag
|
|
|
|
*
|
|
|
|
* @param tag An identifier to find the child node.
|
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* @return a Node object whose tag equals to the input parameter
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-12-27 16:01:03 +08:00
|
|
|
virtual Node * getChildByTag(int tag);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Return an array of children
|
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* Composing a "tree" structure is a very important feature of Node
|
2013-01-17 11:20:25 +08:00
|
|
|
* Here's a sample code of traversing children array:
|
2013-11-12 12:21:01 +08:00
|
|
|
@code
|
2013-12-18 17:47:20 +08:00
|
|
|
Node* node = nullptr;
|
2013-11-12 12:21:01 +08:00
|
|
|
CCARRAY_FOREACH(parent->getChildren(), node)
|
|
|
|
{
|
|
|
|
node->setPosition(0,0);
|
|
|
|
}
|
|
|
|
@endcode
|
2013-09-23 02:39:42 +08:00
|
|
|
* This sample code traverses all children nodes, and set their position to (0,0)
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return An array of children
|
|
|
|
*/
|
2013-11-28 16:02:03 +08:00
|
|
|
virtual Vector<Node*>& getChildren() { return _children; }
|
|
|
|
virtual const Vector<Node*>& getChildren() const { return _children; }
|
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Get the amount of children.
|
|
|
|
*
|
|
|
|
* @return The amount of children.
|
|
|
|
*/
|
2013-12-27 16:01:03 +08:00
|
|
|
virtual ssize_t getChildrenCount() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Sets the parent node
|
|
|
|
*
|
2013-11-30 01:09:38 +08:00
|
|
|
* @param parent A pointer to the parent node
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
virtual void setParent(Node* parent);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns a pointer to the parent node
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setParent(Node*)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-11-30 01:09:38 +08:00
|
|
|
* @returns A pointer to the parent node
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-19 07:30:19 +08:00
|
|
|
virtual Node* getParent() { return _parent; }
|
|
|
|
virtual const Node* getParent() const { return _parent; }
|
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
////// REMOVES //////
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Removes this node itself from its parent node with a cleanup.
|
|
|
|
* If the node orphan, then nothing happens.
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `removeFromParentAndCleanup(bool)`
|
2012-11-14 18:05:15 +08:00
|
|
|
*/
|
2012-11-05 18:41:52 +08:00
|
|
|
virtual void removeFromParent();
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
|
|
|
* Removes this node itself from its parent node.
|
2013-01-17 11:20:25 +08:00
|
|
|
* If the node orphan, then nothing happens.
|
|
|
|
* @param cleanup true if all actions and callbacks on this node should be removed, false otherwise.
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js removeFromParent
|
|
|
|
* @lua removeFromParent
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2012-11-05 18:41:52 +08:00
|
|
|
virtual void removeFromParentAndCleanup(bool cleanup);
|
2013-07-19 14:57:54 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Removes a child from the container. It will also cleanup all running actions depending on the cleanup parameter.
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* @param child The child node which will be removed.
|
|
|
|
* @param cleanup true if all running actions and callbacks on the child node will be cleanup, false otherwise.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-19 14:57:54 +08:00
|
|
|
virtual void removeChild(Node* child, bool cleanup = true);
|
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Removes a child from the container by tag value. It will also cleanup all running actions depending on the cleanup parameter
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* @param tag An interger number that identifies a child node
|
2013-11-30 01:09:38 +08:00
|
|
|
* @param cleanup true if all running actions and callbacks on the child node will be cleanup, false otherwise.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-19 14:57:54 +08:00
|
|
|
virtual void removeChildByTag(int tag, bool cleanup = true);
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Removes all children from the container with a cleanup.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `removeAllChildrenWithCleanup(bool)`
|
2012-11-14 18:05:15 +08:00
|
|
|
*/
|
2012-11-05 18:41:52 +08:00
|
|
|
virtual void removeAllChildren();
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Removes all children from the container, and do a cleanup to all running actions depending on the cleanup parameter.
|
|
|
|
*
|
|
|
|
* @param cleanup true if all running actions on all children nodes should be cleanup, false oterwise.
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js removeAllChildren
|
|
|
|
* @lua removeAllChildren
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2012-04-19 14:35:52 +08:00
|
|
|
virtual void removeAllChildrenWithCleanup(bool cleanup);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Reorders a child according to a new z value.
|
|
|
|
*
|
|
|
|
* @param child An already added child node. It MUST be already added.
|
2014-01-22 01:26:58 +08:00
|
|
|
* @param localZOrder Z order for drawing priority. Please refer to setLocalZOrder(int)
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2014-01-22 01:26:58 +08:00
|
|
|
virtual void reorderChild(Node * child, int localZOrder);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Sorts the children array once before drawing, instead of every time when a child is added or reordered.
|
|
|
|
* This appraoch can improves the performance massively.
|
2013-11-30 01:09:38 +08:00
|
|
|
* @note Don't call this manually unless a child added needs to be removed in the same frame
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
|
|
|
virtual void sortAllChildren();
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end of Children and Parent
|
2013-12-12 16:21:21 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
|
|
|
/// @name Tag & User data
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns a tag that is used to identify the node easily.
|
|
|
|
*
|
|
|
|
* You can set tags to node then identify them easily.
|
2013-11-12 12:21:01 +08:00
|
|
|
@code
|
|
|
|
#define TAG_PLAYER 1
|
|
|
|
#define TAG_MONSTER 2
|
|
|
|
#define TAG_BOSS 3
|
|
|
|
// set tags
|
|
|
|
node1->setTag(TAG_PLAYER);
|
|
|
|
node2->setTag(TAG_MONSTER);
|
|
|
|
node3->setTag(TAG_BOSS);
|
|
|
|
parent->addChild(node1);
|
|
|
|
parent->addChild(node2);
|
|
|
|
parent->addChild(node3);
|
|
|
|
// identify by tags
|
2013-12-18 17:47:20 +08:00
|
|
|
Node* node = nullptr;
|
2013-11-12 12:21:01 +08:00
|
|
|
CCARRAY_FOREACH(parent->getChildren(), node)
|
|
|
|
{
|
|
|
|
switch(node->getTag())
|
|
|
|
{
|
|
|
|
case TAG_PLAYER:
|
|
|
|
break;
|
|
|
|
case TAG_MONSTER:
|
|
|
|
break;
|
|
|
|
case TAG_BOSS:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@endcode
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return A interger that identifies the node.
|
|
|
|
*/
|
2013-05-09 06:20:08 +08:00
|
|
|
virtual int getTag() const;
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Changes the tag that is used to identify the node easily.
|
|
|
|
*
|
|
|
|
* Please refer to getTag for the sample code.
|
|
|
|
*
|
2013-07-29 19:36:47 +08:00
|
|
|
* @param tag A interger that indentifies the node.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
virtual void setTag(int tag);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Returns a custom user data pointer
|
|
|
|
*
|
|
|
|
* You can set everything in UserData pointer, a data block, a structure or an object.
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* @return A custom user data pointer
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-19 07:30:19 +08:00
|
|
|
virtual void* getUserData() { return _userData; }
|
2013-09-13 11:41:20 +08:00
|
|
|
/**
|
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
|
|
|
*/
|
2013-07-19 07:30:19 +08:00
|
|
|
virtual const void* getUserData() const { return _userData; }
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Sets a custom user data pointer
|
|
|
|
*
|
|
|
|
* You can set everything in UserData pointer, a data block, a structure or an object, etc.
|
2013-11-30 01:09:38 +08:00
|
|
|
* @warning Don't forget to release the memory manually,
|
2013-01-17 11:20:25 +08:00
|
|
|
* especially before you change this data pointer, and before this node is autoreleased.
|
|
|
|
*
|
2013-07-29 19:36:47 +08:00
|
|
|
* @param userData A custom user data pointer
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
virtual void setUserData(void *userData);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Returns a user assigned Object
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* Similar to userData, but instead of holding a void* it holds an object
|
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* @return A user assigned Object
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2014-02-20 10:53:49 +08:00
|
|
|
virtual Ref* getUserObject() { return _userObject; }
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
|
|
|
*/
|
2014-02-20 10:53:49 +08:00
|
|
|
virtual const Ref* getUserObject() const { return _userObject; }
|
2013-07-19 07:30:19 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Returns a user assigned Object
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* Similar to UserData, but instead of holding a void* it holds an object.
|
|
|
|
* The UserObject will be retained once in this method,
|
|
|
|
* and the previous UserObject (if existed) will be relese.
|
2013-06-20 14:13:12 +08:00
|
|
|
* The UserObject will be released in Node's destructure.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-07-29 19:36:47 +08:00
|
|
|
* @param userObject A user assigned Object
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2014-02-20 10:53:49 +08:00
|
|
|
virtual void setUserObject(Ref *userObject);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end of Tag & User Data
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
|
|
|
/// @name Shader Program
|
|
|
|
/**
|
|
|
|
* Return the shader program currently used for this node
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* @return The shader program currelty used for this node
|
|
|
|
*/
|
2013-07-19 07:30:19 +08:00
|
|
|
virtual GLProgram* getShaderProgram() { return _shaderProgram; }
|
|
|
|
virtual const GLProgram* getShaderProgram() const { return _shaderProgram; }
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Sets the shader program for this node
|
|
|
|
*
|
|
|
|
* Since v2.0, each rendering node must set its shader program.
|
|
|
|
* It should be set in initialize phase.
|
2013-11-12 12:21:01 +08:00
|
|
|
@code
|
|
|
|
node->setShaderProgram(ShaderCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR));
|
|
|
|
@endcode
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-07-29 19:36:47 +08:00
|
|
|
* @param shaderProgram The shader program which fetchs from ShaderCache.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
virtual void setShaderProgram(GLProgram *shaderProgram);
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end of Shader Program
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Returns whether or not the node accepts event callbacks.
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* Running means the node accept event callbacks like onEnter(), onExit(), update()
|
|
|
|
*
|
|
|
|
* @return Whether or not the node is running.
|
|
|
|
*/
|
2013-07-04 08:22:15 +08:00
|
|
|
virtual bool isRunning() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Schedules for lua script.
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
void scheduleUpdateWithPriorityLua(int handler, int priority);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end Script Bindings
|
|
|
|
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
|
|
|
/// @name Event Callbacks
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Event callback that is invoked every time when Node enters the 'stage'.
|
|
|
|
* If the Node enters the 'stage' with a transition, this event is called when the transition starts.
|
2013-01-17 11:20:25 +08:00
|
|
|
* During onEnter you can't access a "sister/brother" node.
|
2013-06-20 14:13:12 +08:00
|
|
|
* If you override onEnter, you shall call its parent's one, e.g., Node::onEnter().
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
|
|
|
virtual void onEnter();
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-06-20 14:13:12 +08:00
|
|
|
/** Event callback that is invoked when the Node enters in the 'stage'.
|
|
|
|
* If the Node enters the 'stage' with a transition, this event is called when the transition finishes.
|
|
|
|
* If you override onEnterTransitionDidFinish, you shall call its parent's one, e.g. Node::onEnterTransitionDidFinish()
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
|
|
|
virtual void onEnterTransitionDidFinish();
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Event callback that is invoked every time the Node leaves the 'stage'.
|
|
|
|
* If the Node leaves the 'stage' with a transition, this event is called when the transition finishes.
|
2013-01-17 11:20:25 +08:00
|
|
|
* During onExit you can't access a sibling node.
|
2013-06-20 14:13:12 +08:00
|
|
|
* If you override onExit, you shall call its parent's one, e.g., Node::onExit().
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
|
|
|
virtual void onExit();
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Event callback that is called every time the Node leaves the 'stage'.
|
|
|
|
* If the Node leaves the 'stage' with a transition, this callback is called when the transition starts.
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-01-17 11:20:25 +08:00
|
|
|
virtual void onExitTransitionDidStart();
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end of event callbacks.
|
2012-02-02 15:58:10 +08:00
|
|
|
|
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Stops all running actions and schedulers
|
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
virtual void cleanup();
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Override this method to draw your own node.
|
|
|
|
* The following GL states will be enabled by default:
|
2013-11-12 12:21:01 +08:00
|
|
|
* - `glEnableClientState(GL_VERTEX_ARRAY);`
|
|
|
|
* - `glEnableClientState(GL_COLOR_ARRAY);`
|
|
|
|
* - `glEnableClientState(GL_TEXTURE_COORD_ARRAY);`
|
|
|
|
* - `glEnable(GL_TEXTURE_2D);`
|
2013-01-17 11:20:25 +08:00
|
|
|
* AND YOU SHOULD NOT DISABLE THEM AFTER DRAWING YOUR NODE
|
|
|
|
* But if you enable any other GL state, you should disable it after drawing your node.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2014-03-01 08:10:48 +08:00
|
|
|
virtual void draw(Renderer *renderer, const kmMat4& transform, bool transformUpdated);
|
2014-02-28 13:43:54 +08:00
|
|
|
virtual void draw() final;
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Visits this node's children and draw them recursively.
|
|
|
|
*/
|
2014-03-01 08:10:48 +08:00
|
|
|
virtual void visit(Renderer *renderer, const kmMat4& parentTransform, bool parentTransformUpdated);
|
2014-02-28 13:43:54 +08:00
|
|
|
virtual void visit() final;
|
|
|
|
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-12-22 04:28:49 +08:00
|
|
|
/** Returns the Scene that contains the Node.
|
|
|
|
It returns `nullptr` if the node doesn't belong to any Scene.
|
|
|
|
This function recursively calls parent->getScene() until parent is a Scene object. The results are not cached. It is that the user caches the results in case this functions is being used inside a loop.
|
|
|
|
*/
|
|
|
|
virtual Scene* getScene();
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Returns a "local" axis aligned bounding box of the node.
|
|
|
|
* The returned box is relative only to its parent.
|
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* @note This method returns a temporaty variable, so it can't returns const Rect&
|
2013-11-12 12:21:01 +08:00
|
|
|
* @todo Rename to `getBoundingBox()` in the future versions.
|
2013-11-30 01:09:38 +08:00
|
|
|
*
|
2013-01-17 11:20:25 +08:00
|
|
|
* @return A "local" axis aligned boudning box of the node.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
virtual Rect getBoundingBox() const;
|
|
|
|
|
|
|
|
/** @deprecated Use getBoundingBox instead */
|
2013-07-18 07:56:19 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE inline virtual Rect boundingBox() const { return getBoundingBox(); }
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-10-26 15:04:01 +08:00
|
|
|
virtual void setEventDispatcher(EventDispatcher* dispatcher);
|
|
|
|
virtual EventDispatcher* getEventDispatcher() const { return _eventDispatcher; };
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
|
|
|
/// @name Actions
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Sets the ActionManager object that is used by all actions.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* @warning If you set a new ActionManager, then previously created actions will be removed.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* @param actionManager A ActionManager object that is used by all actions.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
virtual void setActionManager(ActionManager* actionManager);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Gets the ActionManager object that is used by all actions.
|
|
|
|
* @see setActionManager(ActionManager*)
|
|
|
|
* @return A ActionManager object.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-19 07:30:19 +08:00
|
|
|
virtual ActionManager* getActionManager() { return _actionManager; }
|
|
|
|
virtual const ActionManager* getActionManager() const { return _actionManager; }
|
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Executes an action, and returns the action that is executed.
|
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* This node becomes the action's target. Refer to Action::getTarget()
|
2013-01-17 11:20:25 +08:00
|
|
|
* @warning Actions don't retain their target.
|
|
|
|
*
|
|
|
|
* @return An Action pointer
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
Action* runAction(Action* action);
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Stops and removes all actions from the running action list .
|
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
void stopAllActions();
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Stops and removes an action from the running action list.
|
|
|
|
*
|
2013-07-29 19:36:47 +08:00
|
|
|
* @param action The action object to be removed.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
void stopAction(Action* action);
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Removes an action from the running action list by its tag.
|
|
|
|
*
|
2013-07-29 19:36:47 +08:00
|
|
|
* @param tag A tag that indicates the action to be removed.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2012-04-19 14:35:52 +08:00
|
|
|
void stopActionByTag(int tag);
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Gets an action from the running action list by its tag.
|
|
|
|
*
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `setTag(int)`, `getTag()`.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @return The action object with the given tag.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-19 07:30:19 +08:00
|
|
|
Action* getActionByTag(int tag);
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Returns the numbers of actions that are running plus the ones that are schedule to run (actions in actionsToAdd and actions arrays).
|
|
|
|
*
|
2012-03-23 17:31:28 +08:00
|
|
|
* Composable actions are counted as 1 action. Example:
|
|
|
|
* If you are running 1 Sequence of 7 actions, it will return 1.
|
|
|
|
* If you are running 7 Sequences of 2 actions, it will return 7.
|
2013-01-17 11:20:25 +08:00
|
|
|
* @todo Rename to getNumberOfRunningActions()
|
|
|
|
*
|
|
|
|
* @return The number of actions that are running plus the ones that are schedule to run
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-12-12 12:07:20 +08:00
|
|
|
ssize_t getNumberOfRunningActions() const;
|
2013-07-18 07:56:19 +08:00
|
|
|
|
|
|
|
/** @deprecated Use getNumberOfRunningActions() instead */
|
2013-12-12 12:07:20 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE ssize_t numberOfRunningActions() const { return getNumberOfRunningActions(); };
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end of Actions
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
|
|
|
/// @name Scheduler and Timer
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Sets a Scheduler object that is used to schedule all "updates" and timers.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* @warning If you set a new Scheduler, then previously created timers/update are going to be removed.
|
|
|
|
* @param scheduler A Shdeduler object that is used to schedule all "update" and timers.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
virtual void setScheduler(Scheduler* scheduler);
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* Gets a Sheduler object.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* @see setScheduler(Scheduler*)
|
|
|
|
* @return A Scheduler object.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-19 07:30:19 +08:00
|
|
|
virtual Scheduler* getScheduler() { return _scheduler; }
|
|
|
|
virtual const Scheduler* getScheduler() const { return _scheduler; }
|
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Checks whether a selector is scheduled.
|
|
|
|
*
|
|
|
|
* @param selector A function selector
|
|
|
|
* @return Whether the funcion selector is scheduled.
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2012-04-19 14:35:52 +08:00
|
|
|
bool isScheduled(SEL_SCHEDULE selector);
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
|
|
|
* Schedules the "update" method.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* It will use the order number 0. This method will be called every frame.
|
|
|
|
* Scheduled methods with a lower order value will be called before the ones that have a higher order value.
|
|
|
|
* Only one "update" method could be scheduled per node.
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2012-04-19 14:35:52 +08:00
|
|
|
void scheduleUpdate(void);
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
|
|
|
* Schedules the "update" method with a custom priority.
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* This selector will be called every frame.
|
|
|
|
* Scheduled methods with a lower priority will be called before the ones that have a higher value.
|
|
|
|
* Only one "update" selector could be scheduled per node (You can't have 2 'update' selectors).
|
2013-09-13 11:41:20 +08:00
|
|
|
* @js NA
|
|
|
|
* @lua NA
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2012-04-19 14:35:52 +08:00
|
|
|
void scheduleUpdateWithPriority(int priority);
|
2012-02-02 15:58:10 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/*
|
2013-01-17 11:20:25 +08:00
|
|
|
* Unschedules the "update" method.
|
|
|
|
* @see scheduleUpdate();
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2012-04-19 14:35:52 +08:00
|
|
|
void unscheduleUpdate(void);
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Schedules a custom selector.
|
|
|
|
*
|
|
|
|
* If the selector is already scheduled, then the interval parameter will be updated without scheduling it again.
|
2013-11-12 12:21:01 +08:00
|
|
|
@code
|
|
|
|
// firstly, implement a schedule function
|
|
|
|
void MyNode::TickMe(float dt);
|
|
|
|
// wrap this function into a selector via schedule_selector marco.
|
|
|
|
this->schedule(schedule_selector(MyNode::TickMe), 0, 0, 0);
|
|
|
|
@endcode
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-08-01 21:40:13 +08:00
|
|
|
* @param selector The SEL_SCHEDULE selector to be scheduled.
|
2013-01-17 11:20:25 +08:00
|
|
|
* @param interval Tick interval in seconds. 0 means tick every frame. If interval = 0, it's recommended to use scheduleUpdate() instead.
|
2013-06-20 14:13:12 +08:00
|
|
|
* @param repeat The selector will be excuted (repeat + 1) times, you can use kRepeatForever for tick infinitely.
|
2013-01-17 11:20:25 +08:00
|
|
|
* @param delay The amount of time that the first tick will wait before execution.
|
2013-09-13 11:41:20 +08:00
|
|
|
* @lua NA
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-01-17 11:20:25 +08:00
|
|
|
void schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Schedules a custom selector with an interval time in seconds.
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `schedule(SEL_SCHEDULE, float, unsigned int, float)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-08-01 21:40:13 +08:00
|
|
|
* @param selector The SEL_SCHEDULE selector to be scheduled.
|
2013-01-17 11:20:25 +08:00
|
|
|
* @param interval Callback interval time in seconds. 0 means tick every frame,
|
2013-09-13 11:41:20 +08:00
|
|
|
* @lua NA
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2012-06-08 13:55:28 +08:00
|
|
|
void schedule(SEL_SCHEDULE selector, float interval);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2012-04-19 14:35:52 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Schedules a selector that runs only once, with a delay of 0 or larger
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `schedule(SEL_SCHEDULE, float, unsigned int, float)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
2013-08-01 21:40:13 +08:00
|
|
|
* @param selector The SEL_SCHEDULE selector to be scheduled.
|
2013-01-17 11:20:25 +08:00
|
|
|
* @param delay The amount of time that the first tick will wait before execution.
|
2013-09-13 11:41:20 +08:00
|
|
|
* @lua NA
|
2012-04-19 14:35:52 +08:00
|
|
|
*/
|
2013-01-17 11:20:25 +08:00
|
|
|
void scheduleOnce(SEL_SCHEDULE selector, float delay);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2012-04-19 14:35:52 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Schedules a custom selector, the scheduled selector will be ticked every frame
|
|
|
|
* @see schedule(SEL_SCHEDULE, float, unsigned int, float)
|
|
|
|
*
|
|
|
|
* @param selector A function wrapped as a selector
|
2013-09-13 11:41:20 +08:00
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
|
|
|
void schedule(SEL_SCHEDULE selector);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Unschedules a custom selector.
|
2013-11-12 12:21:01 +08:00
|
|
|
* @see `schedule(SEL_SCHEDULE, float, unsigned int, float)`
|
2013-01-17 11:20:25 +08:00
|
|
|
*
|
|
|
|
* @param selector A function wrapped as a selector
|
2013-09-13 11:41:20 +08:00
|
|
|
* @lua NA
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2012-04-19 14:35:52 +08:00
|
|
|
void unschedule(SEL_SCHEDULE selector);
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Unschedule all scheduled selectors: custom selectors, and the 'update' selector.
|
|
|
|
* Actions are not affected by this method.
|
2013-09-13 11:41:20 +08:00
|
|
|
* @lua NA
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2012-04-19 14:35:52 +08:00
|
|
|
void unscheduleAllSelectors(void);
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-10-26 15:04:01 +08:00
|
|
|
/**
|
|
|
|
* Resumes all scheduled selectors, actions and event listeners.
|
2013-01-17 11:20:25 +08:00
|
|
|
* This method is called internally by onEnter
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-10-26 15:04:01 +08:00
|
|
|
void resume(void);
|
|
|
|
/**
|
|
|
|
* Pauses all scheduled selectors, actions and event listeners..
|
|
|
|
* This method is called internally by onExit
|
|
|
|
*/
|
|
|
|
void pause(void);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-10-26 15:04:01 +08:00
|
|
|
/**
|
|
|
|
* Resumes all scheduled selectors, actions and event listeners.
|
|
|
|
* This method is called internally by onEnter
|
|
|
|
*/
|
|
|
|
CC_DEPRECATED_ATTRIBUTE void resumeSchedulerAndActions(void);
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-10-26 15:04:01 +08:00
|
|
|
* Pauses all scheduled selectors, actions and event listeners..
|
2013-01-17 11:20:25 +08:00
|
|
|
* This method is called internally by onExit
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-10-26 15:04:01 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE void pauseSchedulerAndActions(void);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/*
|
2013-01-17 11:20:25 +08:00
|
|
|
* Update method will be called automatically every frame if "scheduleUpdate" is called, and the node is "live"
|
2012-11-14 18:05:15 +08:00
|
|
|
*/
|
2013-01-17 11:20:25 +08:00
|
|
|
virtual void update(float delta);
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-03-13 14:53:51 +08:00
|
|
|
/// @} end of Scheduler and Timer
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
|
|
|
/// @name Transformations
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/**
|
|
|
|
* Calls children's updateTransform() method recursively.
|
|
|
|
*
|
2013-06-20 14:13:12 +08:00
|
|
|
* This method is moved from Sprite, so it's no longer specific to Sprite.
|
|
|
|
* As the result, you apply SpriteBatchNode's optimization on your customed Node.
|
2013-11-12 12:21:01 +08:00
|
|
|
* e.g., `batchNode->addChild(myCustomNode)`, while you can only addChild(sprite) before.
|
2013-01-17 11:20:25 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
virtual void updateTransform();
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Returns the matrix that transform the node's (local) space coordinates into the parent's space coordinates.
|
|
|
|
* The matrix is in Pixels.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-12-10 09:32:51 +08:00
|
|
|
virtual const kmMat4& getNodeToParentTransform() const;
|
|
|
|
virtual AffineTransform getNodeToParentAffineTransform() const;
|
2013-07-17 09:16:04 +08:00
|
|
|
|
2013-12-21 08:33:31 +08:00
|
|
|
/**
|
|
|
|
* Sets the Transformation matrix manually.
|
|
|
|
*/
|
|
|
|
virtual void setNodeToParentTransform(const kmMat4& transform);
|
|
|
|
|
2013-07-17 09:16:04 +08:00
|
|
|
/** @deprecated use getNodeToParentTransform() instead */
|
2013-12-10 09:32:51 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE inline virtual AffineTransform nodeToParentTransform() const { return getNodeToParentAffineTransform(); }
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Returns the matrix that transform parent's space coordinates to the node's (local) space coordinates.
|
|
|
|
* The matrix is in Pixels.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-12-10 09:32:51 +08:00
|
|
|
virtual const kmMat4& getParentToNodeTransform() const;
|
|
|
|
virtual AffineTransform getParentToNodeAffineTransform() const;
|
2013-07-17 09:16:04 +08:00
|
|
|
|
|
|
|
/** @deprecated Use getParentToNodeTransform() instead */
|
2013-12-10 09:32:51 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE inline virtual AffineTransform parentToNodeTransform() const { return getParentToNodeAffineTransform(); }
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Returns the world affine transform matrix. The matrix is in Pixels.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-12-10 09:32:51 +08:00
|
|
|
virtual kmMat4 getNodeToWorldTransform() const;
|
|
|
|
virtual AffineTransform getNodeToWorldAffineTransform() const;
|
2013-07-17 09:16:04 +08:00
|
|
|
|
|
|
|
/** @deprecated Use getNodeToWorldTransform() instead */
|
2013-12-10 09:32:51 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE inline virtual AffineTransform nodeToWorldTransform() const { return getNodeToWorldAffineTransform(); }
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Returns the inverse world affine transform matrix. The matrix is in Pixels.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-12-10 09:32:51 +08:00
|
|
|
virtual kmMat4 getWorldToNodeTransform() const;
|
|
|
|
virtual AffineTransform getWorldToNodeAffineTransform() const;
|
|
|
|
|
2013-07-17 09:16:04 +08:00
|
|
|
|
2014-03-01 08:10:48 +08:00
|
|
|
/** @deprecated Use getWorldToNodeTransform() instead */
|
2013-12-10 09:32:51 +08:00
|
|
|
CC_DEPRECATED_ATTRIBUTE inline virtual AffineTransform worldToNodeTransform() const { return getWorldToNodeAffineTransform(); }
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end of Transformations
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @{
|
|
|
|
/// @name Coordinate Converters
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Converts a Point to node (local) space coordinates. The result is in Points.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
Point convertToNodeSpace(const Point& worldPoint) const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Converts a Point to world space coordinates. The result is in Points.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
Point convertToWorldSpace(const Point& nodePoint) const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Converts a Point to node (local) space coordinates. The result is in Points.
|
|
|
|
* treating the returned/received node point as anchor relative.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
Point convertToNodeSpaceAR(const Point& worldPoint) const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-01-17 11:20:25 +08:00
|
|
|
* Converts a local Point to world space coordinates.The result is in Points.
|
|
|
|
* treating the returned/received node point as anchor relative.
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
Point convertToWorldSpaceAR(const Point& nodePoint) const;
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* convenience methods which take a Touch instead of Point
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
Point convertTouchToNodeSpace(Touch * touch) const;
|
2012-03-23 17:31:28 +08:00
|
|
|
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-06-20 14:13:12 +08:00
|
|
|
* converts a Touch (world coordinates) into a local coordinate. This method is AR (Anchor Relative).
|
2012-03-23 17:31:28 +08:00
|
|
|
*/
|
2013-07-17 09:16:04 +08:00
|
|
|
Point convertTouchToNodeSpaceAR(Touch * touch) const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-02-20 22:33:28 +08:00
|
|
|
/**
|
2014-01-14 04:52:07 +08:00
|
|
|
* Sets an additional transform matrix to the node.
|
|
|
|
*
|
|
|
|
* In order to remove it, set the Identity Matrix to the additional transform.
|
2013-02-22 16:01:49 +08:00
|
|
|
*
|
2013-07-17 09:16:04 +08:00
|
|
|
* @note The additional transform will be concatenated at the end of getNodeToParentTransform.
|
2013-02-22 16:01:49 +08:00
|
|
|
* It could be used to simulate `parent-child` relationship between two nodes (e.g. one is in BatchNode, another isn't).
|
2013-11-12 12:21:01 +08:00
|
|
|
@code
|
|
|
|
// create a batchNode
|
|
|
|
SpriteBatchNode* batch= SpriteBatchNode::create("Icon-114.png");
|
|
|
|
this->addChild(batch);
|
|
|
|
|
|
|
|
// create two sprites, spriteA will be added to batchNode, they are using different textures.
|
|
|
|
Sprite* spriteA = Sprite::createWithTexture(batch->getTexture());
|
|
|
|
Sprite* spriteB = Sprite::create("Icon-72.png");
|
|
|
|
|
|
|
|
batch->addChild(spriteA);
|
|
|
|
|
|
|
|
// We can't make spriteB as spriteA's child since they use different textures. So just add it to layer.
|
|
|
|
// But we want to simulate `parent-child` relationship for these two node.
|
|
|
|
this->addChild(spriteB);
|
|
|
|
|
|
|
|
//position
|
|
|
|
spriteA->setPosition(Point(200, 200));
|
|
|
|
|
|
|
|
// Gets the spriteA's transform.
|
2014-01-14 04:52:07 +08:00
|
|
|
auto t = spriteA->getNodeToParentTransform();
|
2013-11-12 12:21:01 +08:00
|
|
|
|
|
|
|
// Sets the additional transform to spriteB, spriteB's postion will based on its pseudo parent i.e. spriteA.
|
|
|
|
spriteB->setAdditionalTransform(t);
|
|
|
|
|
|
|
|
//scale
|
|
|
|
spriteA->setScale(2);
|
|
|
|
|
|
|
|
// Gets the spriteA's transform.
|
|
|
|
t = spriteA->getNodeToParentTransform();
|
|
|
|
|
|
|
|
// Sets the additional transform to spriteB, spriteB's scale will based on its pseudo parent i.e. spriteA.
|
|
|
|
spriteB->setAdditionalTransform(t);
|
|
|
|
|
|
|
|
//rotation
|
|
|
|
spriteA->setRotation(20);
|
|
|
|
|
|
|
|
// Gets the spriteA's transform.
|
|
|
|
t = spriteA->getNodeToParentTransform();
|
|
|
|
|
|
|
|
// Sets the additional transform to spriteB, spriteB's rotation will based on its pseudo parent i.e. spriteA.
|
|
|
|
spriteB->setAdditionalTransform(t);
|
|
|
|
@endcode
|
2013-02-22 16:01:49 +08:00
|
|
|
*/
|
2013-12-10 09:32:51 +08:00
|
|
|
void setAdditionalTransform(const kmMat4& additionalTransform);
|
2014-03-01 08:10:48 +08:00
|
|
|
void setAdditionalTransform(const AffineTransform& additionalTransform);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// @} end of Coordinate Converters
|
2012-12-10 13:48:27 +08:00
|
|
|
|
2013-06-04 17:38:43 +08:00
|
|
|
/// @{
|
|
|
|
/// @name component functions
|
2013-11-30 01:09:38 +08:00
|
|
|
/**
|
2013-06-04 17:38:43 +08:00
|
|
|
* gets a component by its name
|
|
|
|
*/
|
2013-12-24 10:51:47 +08:00
|
|
|
Component* getComponent(const std::string& pName);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
2013-06-04 17:38:43 +08:00
|
|
|
* adds a component
|
|
|
|
*/
|
2013-06-20 14:13:12 +08:00
|
|
|
virtual bool addComponent(Component *pComponent);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* removes a component by its name
|
2013-06-04 17:38:43 +08:00
|
|
|
*/
|
2013-12-24 10:51:47 +08:00
|
|
|
virtual bool removeComponent(const std::string& pName);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-06-04 17:38:43 +08:00
|
|
|
/**
|
|
|
|
* removes all components
|
|
|
|
*/
|
|
|
|
virtual void removeAllComponents();
|
|
|
|
/// @} end of component functions
|
2013-11-30 01:09:38 +08:00
|
|
|
|
|
|
|
|
2013-12-26 23:55:05 +08:00
|
|
|
#if CC_USE_PHYSICS
|
2013-09-30 13:02:17 +08:00
|
|
|
/**
|
|
|
|
* set the PhysicsBody that let the sprite effect with physics
|
|
|
|
*/
|
2013-10-18 15:34:13 +08:00
|
|
|
void setPhysicsBody(PhysicsBody* body);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-09-30 13:02:17 +08:00
|
|
|
/**
|
|
|
|
* get the PhysicsBody the sprite have
|
|
|
|
*/
|
|
|
|
PhysicsBody* getPhysicsBody() const;
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-09-30 13:02:17 +08:00
|
|
|
#endif
|
2013-12-06 18:07:16 +08:00
|
|
|
|
|
|
|
// overrides
|
|
|
|
virtual GLubyte getOpacity() const;
|
|
|
|
virtual GLubyte getDisplayedOpacity() const;
|
|
|
|
virtual void setOpacity(GLubyte opacity);
|
|
|
|
virtual void updateDisplayedOpacity(GLubyte parentOpacity);
|
|
|
|
virtual bool isCascadeOpacityEnabled() const;
|
|
|
|
virtual void setCascadeOpacityEnabled(bool cascadeOpacityEnabled);
|
|
|
|
|
|
|
|
virtual const Color3B& getColor(void) const;
|
|
|
|
virtual const Color3B& getDisplayedColor() const;
|
|
|
|
virtual void setColor(const Color3B& color);
|
|
|
|
virtual void updateDisplayedColor(const Color3B& parentColor);
|
|
|
|
virtual bool isCascadeColorEnabled() const;
|
|
|
|
virtual void setCascadeColorEnabled(bool cascadeColorEnabled);
|
|
|
|
|
|
|
|
virtual void setOpacityModifyRGB(bool bValue) {CC_UNUSED_PARAM(bValue);}
|
|
|
|
virtual bool isOpacityModifyRGB() const { return false; };
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-08-27 09:04:51 +08:00
|
|
|
protected:
|
2013-11-14 07:55:36 +08:00
|
|
|
// Nodes should be created using create();
|
|
|
|
Node();
|
|
|
|
virtual ~Node();
|
|
|
|
virtual bool init();
|
2013-11-28 17:57:13 +08:00
|
|
|
|
|
|
|
/// lazy allocs
|
|
|
|
void childrenAlloc(void);
|
2013-11-28 16:02:03 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// helper that reorder a child
|
2013-06-20 14:13:12 +08:00
|
|
|
void insertChild(Node* child, int z);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// Removes a child, call child->onExit(), do cleanup, remove it from children array.
|
2013-12-12 12:07:20 +08:00
|
|
|
void detachChild(Node *child, ssize_t index, bool doCleanup);
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-01-17 11:20:25 +08:00
|
|
|
/// Convert cocos2d coordinates to UI windows coordinate.
|
2013-07-17 09:16:04 +08:00
|
|
|
Point convertToWindowSpace(const Point& nodePoint) const;
|
2014-03-01 08:10:48 +08:00
|
|
|
|
|
|
|
kmMat4 transform(const kmMat4 &parentTransform);
|
|
|
|
|
2013-12-06 18:07:16 +08:00
|
|
|
virtual void updateCascadeOpacity();
|
|
|
|
virtual void disableCascadeOpacity();
|
|
|
|
virtual void updateCascadeColor();
|
|
|
|
virtual void disableCascadeColor();
|
2013-12-11 15:57:20 +08:00
|
|
|
virtual void updateColor() {}
|
2013-01-17 11:20:25 +08:00
|
|
|
|
2014-02-23 11:16:42 +08:00
|
|
|
float _rotationX; ///< rotation on the X-axis
|
|
|
|
float _rotationY; ///< rotation on the Y-axis
|
2013-08-27 09:04:51 +08:00
|
|
|
|
2014-02-23 11:16:42 +08:00
|
|
|
// rotation Z is decomposed in 2 to simulate Skew for Flash animations
|
|
|
|
float _rotationZ_X; ///< rotation angle on Z-axis, component X
|
|
|
|
float _rotationZ_Y; ///< rotation angle on Z-axis, component Y
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-02-23 11:16:42 +08:00
|
|
|
float _scaleX; ///< scaling factor on x-axis
|
|
|
|
float _scaleY; ///< scaling factor on y-axis
|
|
|
|
float _scaleZ; ///< scaling factor on z-axis
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-02-23 11:16:42 +08:00
|
|
|
Point _position; ///< position of the node
|
|
|
|
float _positionZ; ///< OpenGL real Z position
|
|
|
|
Point _normalizedPosition; ///< position in normalized coordinates
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-02-23 11:16:42 +08:00
|
|
|
float _skewX; ///< skew angle on x-axis
|
|
|
|
float _skewY; ///< skew angle on y-axis
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-03-01 08:10:48 +08:00
|
|
|
Point _anchorPointInPoints; ///< anchor point in points
|
|
|
|
Point _anchorPoint; ///< anchor point normalized (NOT in points)
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-03-01 08:10:48 +08:00
|
|
|
Size _contentSize; ///< untransformed size of the node
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-01-14 04:52:07 +08:00
|
|
|
kmMat4 _modelViewTransform; ///< ModelView transform of the Node.
|
|
|
|
|
2013-07-17 09:16:04 +08:00
|
|
|
// "cache" variables are allowed to be mutable
|
2014-03-01 08:10:48 +08:00
|
|
|
mutable kmMat4 _transform; ///< transform
|
|
|
|
mutable bool _transformDirty; ///< transform dirty flag
|
|
|
|
mutable kmMat4 _inverse; ///< inverse transform
|
|
|
|
mutable bool _inverseDirty; ///< inverse transform dirty flag
|
2013-12-10 09:32:51 +08:00
|
|
|
mutable kmMat4 _additionalTransform; ///< transform
|
2014-01-14 04:52:07 +08:00
|
|
|
bool _useAdditionalTransform; ///< The flag to check whether the additional transform is dirty
|
2014-03-01 08:10:48 +08:00
|
|
|
bool _transformUpdated; ///< Whether or not the Transform object was updated since the last frame
|
2014-01-19 03:35:27 +08:00
|
|
|
|
2014-03-01 08:10:48 +08:00
|
|
|
int _localZOrder; ///< Local order (relative to its siblings) used to sort the node
|
|
|
|
float _globalZOrder; ///< Global order used to sort the node
|
2014-01-19 03:35:27 +08:00
|
|
|
|
2014-03-01 08:10:48 +08:00
|
|
|
Vector<Node*> _children; ///< array of children nodes
|
2013-06-20 14:13:12 +08:00
|
|
|
Node *_parent; ///< weak reference to parent node
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-03-01 08:10:48 +08:00
|
|
|
int _tag; ///< a tag. Can be any number you assigned just to identify this node
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-03-01 08:10:48 +08:00
|
|
|
void *_userData; ///< A user assingned void pointer, Can be point to any cpp object
|
|
|
|
Ref *_userObject; ///< A user assigned Object
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-06-20 14:13:12 +08:00
|
|
|
GLProgram *_shaderProgram; ///< OpenGL shader
|
2013-07-26 09:42:53 +08:00
|
|
|
|
2014-01-22 01:26:58 +08:00
|
|
|
int _orderOfArrival; ///< used to preserve sequence while sorting children with the same localZOrder
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-06-20 14:13:12 +08:00
|
|
|
Scheduler *_scheduler; ///< scheduler used to schedule timers and updates
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-06-20 14:13:12 +08:00
|
|
|
ActionManager *_actionManager; ///< a pointer to ActionManager singleton, which is used to handle all the actions
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-10-26 15:04:01 +08:00
|
|
|
EventDispatcher* _eventDispatcher; ///< event dispatcher used to dispatch all kinds of events
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-03-01 08:10:48 +08:00
|
|
|
bool _running; ///< is running
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-03-01 08:10:48 +08:00
|
|
|
bool _visible; ///< is this node visible
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-06-20 14:13:12 +08:00
|
|
|
bool _ignoreAnchorPointForPosition; ///< true if the Anchor Point will be (0,0) when you position the Node, false otherwise.
|
|
|
|
///< Used by Layer and Scene.
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-06-15 14:03:30 +08:00
|
|
|
bool _reorderChildDirty; ///< children order dirty flag
|
|
|
|
bool _isTransitionFinished; ///< flag to indicate whether the transition was finished
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2014-02-20 16:40:46 +08:00
|
|
|
#if CC_ENABLE_SCRIPT_BINDING
|
2013-06-15 14:03:30 +08:00
|
|
|
int _scriptHandler; ///< script handler for onEnter() & onExit(), used in Javascript binding and Lua binding.
|
|
|
|
int _updateScriptHandler; ///< script handler for update() callback per frame, which is invoked from lua & javascript.
|
|
|
|
ccScriptType _scriptType; ///< type of script binding, lua or javascript
|
2014-02-20 16:40:46 +08:00
|
|
|
#endif
|
|
|
|
|
2013-06-20 14:13:12 +08:00
|
|
|
ComponentContainer *_componentContainer; ///< Dictionary of components
|
2013-11-30 01:09:38 +08:00
|
|
|
|
2013-12-26 23:55:05 +08:00
|
|
|
#if CC_USE_PHYSICS
|
2013-09-30 13:02:17 +08:00
|
|
|
PhysicsBody* _physicsBody; ///< the physicsBody the node have
|
|
|
|
#endif
|
2013-12-06 18:07:16 +08:00
|
|
|
|
|
|
|
// opacity controls
|
2013-12-11 15:57:20 +08:00
|
|
|
GLubyte _displayedOpacity;
|
2013-02-27 14:48:19 +08:00
|
|
|
GLubyte _realOpacity;
|
2013-12-11 15:57:20 +08:00
|
|
|
Color3B _displayedColor;
|
2013-07-11 16:38:58 +08:00
|
|
|
Color3B _realColor;
|
2013-12-11 15:57:20 +08:00
|
|
|
bool _cascadeColorEnabled;
|
2013-02-27 14:48:19 +08:00
|
|
|
bool _cascadeOpacityEnabled;
|
2013-11-14 07:55:36 +08:00
|
|
|
|
|
|
|
private:
|
2013-12-06 18:07:16 +08:00
|
|
|
CC_DISALLOW_COPY_AND_ASSIGN(Node);
|
2013-02-27 09:38:30 +08:00
|
|
|
};
|
|
|
|
|
2013-12-09 11:32:28 +08:00
|
|
|
//#pragma mark - NodeRGBA
|
|
|
|
|
|
|
|
/** NodeRGBA is a subclass of Node that implements the RGBAProtocol protocol.
|
|
|
|
|
|
|
|
All features from Node are valid, plus the following new features:
|
|
|
|
- opacity
|
|
|
|
- RGB colors
|
|
|
|
|
|
|
|
Opacity/Color propagates into children that conform to the RGBAProtocol if cascadeOpacity/cascadeColor is enabled.
|
|
|
|
@since v2.1
|
|
|
|
*/
|
2013-12-13 10:10:49 +08:00
|
|
|
class CC_DLL __NodeRGBA : public Node, public __RGBAProtocol
|
2013-12-09 11:32:28 +08:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
// overrides
|
|
|
|
virtual GLubyte getOpacity() const override { return Node::getOpacity(); }
|
|
|
|
virtual GLubyte getDisplayedOpacity() const override { return Node::getDisplayedOpacity(); }
|
|
|
|
virtual void setOpacity(GLubyte opacity) override { return Node::setOpacity(opacity); }
|
|
|
|
virtual void updateDisplayedOpacity(GLubyte parentOpacity) override { return Node::updateDisplayedOpacity(parentOpacity); }
|
|
|
|
virtual bool isCascadeOpacityEnabled() const override { return Node::isCascadeOpacityEnabled(); }
|
|
|
|
virtual void setCascadeOpacityEnabled(bool cascadeOpacityEnabled) override { return Node::setCascadeOpacityEnabled(cascadeOpacityEnabled); }
|
|
|
|
|
|
|
|
virtual const Color3B& getColor(void) const override { return Node::getColor(); }
|
|
|
|
virtual const Color3B& getDisplayedColor() const override { return Node::getDisplayedColor(); }
|
|
|
|
virtual void setColor(const Color3B& color) override { return Node::setColor(color); }
|
|
|
|
virtual void updateDisplayedColor(const Color3B& parentColor) override { return Node::updateDisplayedColor(parentColor); }
|
|
|
|
virtual bool isCascadeColorEnabled() const override { return Node::isCascadeColorEnabled(); }
|
|
|
|
virtual void setCascadeColorEnabled(bool cascadeColorEnabled) override { return Node::setCascadeColorEnabled(cascadeColorEnabled); }
|
|
|
|
|
|
|
|
virtual void setOpacityModifyRGB(bool bValue) override { return Node::setOpacityModifyRGB(bValue); }
|
|
|
|
virtual bool isOpacityModifyRGB() const override { return Node::isOpacityModifyRGB(); }
|
|
|
|
|
|
|
|
protected:
|
2013-12-16 03:42:54 +08:00
|
|
|
__NodeRGBA();
|
2013-12-13 10:10:49 +08:00
|
|
|
virtual ~__NodeRGBA() {}
|
2013-12-09 11:32:28 +08:00
|
|
|
|
|
|
|
private:
|
2013-12-13 10:10:49 +08:00
|
|
|
CC_DISALLOW_COPY_AND_ASSIGN(__NodeRGBA);
|
2013-12-09 11:32:28 +08:00
|
|
|
};
|
|
|
|
|
2012-06-20 18:09:11 +08:00
|
|
|
// end of base_node group
|
|
|
|
/// @}
|
|
|
|
|
2012-03-23 17:31:28 +08:00
|
|
|
NS_CC_END
|
2010-07-07 15:15:30 +08:00
|
|
|
|
2014-02-20 10:53:49 +08:00
|
|
|
#endif // __CCNODE_H__
|