Cornell Cocos
Cornell Extensions to Cocos2d
|
#include <CUPathNode.h>
Public Member Functions | |
void | setStroke (float stroke) |
float | getStroke () const |
void | setClosed (bool closed) |
bool | getClosed () const |
void | setJoint (Poly2::Joint joint) |
Poly2::Joint | getJoint () const |
void | setCap (Poly2::Cap cap) |
Poly2::Cap | getCap () const |
virtual std::string | getDescription () const override |
virtual void | setPolygon (const Poly2 &poly) override |
virtual void | setPolygon (const Rect &rect) override |
virtual void | draw (Renderer *renderer, const Mat4 &transform, uint32_t flags) override |
virtual | ~PathNode (void) |
Public Member Functions inherited from TexturedNode | |
virtual void | setTexture (const std::string &filename) |
virtual void | setTexture (Texture2D *texture) override |
virtual Texture2D * | getTexture () const override |
virtual void | setPolygon (float *vertices, int size, int offset=0) |
const Poly2 & | getPolygon () const |
virtual void | shiftPolygon (float dx, float dy) |
const Rect & | getBoundingRect () const |
void | setBlendFunc (const BlendFunc &blendFunc) override |
const BlendFunc & | getBlendFunc () const override |
virtual void | setOpacityModifyRGB (bool modify) override |
virtual bool | isOpacityModifyRGB (void) const override |
void | flipHorizontal (bool flag) |
bool | isFlipHorizontal () const |
void | flipVertical (bool flag) |
bool | isFlipVertical () const |
virtual | ~TexturedNode (void) |
virtual bool | init () override |
virtual bool | init (float *vertices, int size, int offset=0) |
virtual bool | init (const Poly2 &poly) |
virtual bool | init (const Rect &rect) |
virtual bool | initWithFile (const std::string &filename) |
virtual bool | initWithFile (const std::string &filename, float *vertices, int size, int offset=0) |
virtual bool | initWithFile (const std::string &filename, const Poly2 &poly) |
virtual bool | initWithFile (const std::string &filename, const Rect &rect) |
virtual bool | initWithTexture (Texture2D *texture) |
virtual bool | initWithTexture (Texture2D *texture, float *vertices, int size, int offset=0) |
virtual bool | initWithTexture (Texture2D *texture, const Poly2 &poly) |
virtual bool | initWithTexture (Texture2D *texture, const Rect &rect) |
Static Public Member Functions | |
static PathNode * | create () |
static PathNode * | createWithVertices (float *vertices, int size, float stroke, bool closed=true) |
static PathNode * | createWithPoly (const Poly2 &poly, float stroke, bool closed=true) |
static PathNode * | createWithRect (const Rect &rect, float stroke) |
static PathNode * | createWithLine (const Vec2 &origin, const Vec2 &dest, float stroke) |
static PathNode * | createWithCircle (const Vec2 ¢er, const Size &size, float stroke, unsigned int segments) |
Public Attributes | |
CC_CONSTRUCTOR_ACCESS | __pad0__: PathNode(float stroke |
CC_CONSTRUCTOR_ACCESS bool | closed =true) |
Public Attributes inherited from TexturedNode | |
CC_CONSTRUCTOR_ACCESS | __pad0__: TexturedNode(void) |
Protected Member Functions | |
virtual void | generateRenderData () override |
Protected Member Functions inherited from TexturedNode | |
TrianglesCommand::Triangles & | allocTriangles (const Poly2 &poly) |
void | clearRenderData () |
void | updateColor () override |
void | updateBlendFunc () |
void | updateTextureCoords () |
Protected Attributes | |
Poly2 | _extrusion |
bool | _closed |
float | _stroke |
Poly2::Joint | _joint |
Poly2::Cap | _endcap |
Protected Attributes inherited from TexturedNode | |
Texture2D * | _texture |
Poly2 | _polygon |
BlendFunc | _blendFunc |
bool | _insideBounds |
bool | _opacityModifyRGB |
TrianglesCommand | _command |
TrianglesCommand::Triangles | _triangles |
bool | _flipHorizontal |
bool | _flipVertical |
Scene graph node to represent a path with width.
This class uses the Cocos2D rendering pipeline to batch graphics information into a single mesh (with one drawing call), whenever possible. Changes to the textures, or drawing a line instead of a solid shape will require a new batch. You should play with your scene graph ordering to best improve performance.
Because paths have width, it is natural to texture them. However, generally you will only want to create a path with the degenerate texture (to draw a solid, colored path). Hence, none of the static constructors take a texture. You are free to update the texture after creation, if you wish.
The polygon is specified in image coordinates. Image coordinates are different from texture coordinates. Their origin is at the bottom-left corner of the file, and each pixel is one unit. This makes specifying to polygon more natural for irregular shapes.
This means that a polygon with vertices (0,0), (width,0), (width,height), and (0,height) would be identical to a sprite node. However, a polygon with vertices (0,0), (2*width,0), (2*width,2*height), and (0,2*height) would tile the sprite (given the wrap settings) twice both horizontally and vertically.
The content size of this node is defined by the size (but not the offset) of the bounding box. The anchor point is relative to this content size. The default anchor point in TexturedNode is (0.5, 0.5). This means that a uniform translation of the polygon (in contrast to the node itself) will not move the shape on the the screen. Instead, it will just change the part of the texture it uses.
For example, suppose the texture has given width and height. We have one polygon with vertices (0,0), (width/2,0), (width/2,height/2), and (0,height/2). We have another polygon with vertices (width/2,height/2), (width,height/2), (width,height), and (width/2,height). Both polygons would create a rectangle of size (width/2,height/2). centered at the node position. However, the first would use the bottom left part of the texture, while the second would use the top right.
|
inlinevirtual |
Releases all resources allocated with this sprite.
After this is called, the polygon and drawing commands will be deleted and no longer safe to use.
|
static |
Creates an empty path node.
The underlying polygon is empty, and must be set via setPolygon.
|
static |
Creates a wireframe that is an ellipse with given the center and dimensions.
The wireframe will show the boundary, not the circle tesselation.
center | The ellipse center point |
size | The size of the ellipse |
stroke | The width of the path |
segments | The number of segments to use |
|
static |
Creates a path that is a line from origin to destination.
origin | The line origin |
dest | The line destination |
stroke | The width of the path |
Creates a path with the given polygon and stroke width.
The path traverses the vertices of the polygon in order, regardless of any tesselation (e.g. the indices are ignored). The path is closed by default.
poly | The polygon for the wireframe path |
stroke | The width of the path |
closed | Whether or not the polygon path is closed. |
|
static |
Creates a path with the given rect and stroke width.
The path will traverse the corners of the rectangle, and the traversal is closed.
rect | The rectangle for the wireframe path |
stroke | The width of the path |
|
static |
Creates a path with the given vertices and stroke width.
The path traverses the vertices in order, regardless of any tesselation. The path is closed by default.
vertices | The vertices forming the wireframe path |
size | The number of elements in vertices |
stroke | The width of the path |
closed | Whether or not the polygon path is closed. |
|
overridevirtual |
Sends drawing commands to the renderer
This method is overridden from Node, to provide the custom commands. Wireframes are drawn to the Wireframe mesh (which is different from the Triangle mesh used for solid shapes) to cut down on the number of drawing calls.
renderer | Reference to the render thread |
transform | The accumulated transform from the parent |
flags | Specialized Cocos2d drawing flags |
|
overrideprotectedvirtual |
Allocate the render data necessary to render this node.
This method allocates the Triangles data used by the TrianglesCommand in the rendering pipeline.
Allocate the wireframe data necessary to render this node.
This method allocates the Wireframe data used by the WireframeCommand in the rendering pipeline.
Reimplemented from TexturedNode.
|
inline |
Returns the cap shape at the ends of the path.
|
inline |
Returns whether the path is closed.
|
overridevirtual |
Returns a string description of this object
This method is useful for debugging.
|
inline |
Returns the joint type between path segments.
|
inline |
Returns the stroke width of the path.
void PathNode::setCap | ( | Poly2::Cap | cap | ) |
Sets the cap shape at the ends of the path.
cap | Cap shape at the ends of the path. |
void PathNode::setClosed | ( | bool | closed | ) |
Sets whether the path is closed.
closed | Whether the path is closed. |
void PathNode::setJoint | ( | Poly2::Joint | joint | ) |
Sets the joint type between path segments.
joint | Joint type between path segments |
|
overridevirtual |
Sets the polygon to the given one in texture space.
poly | The polygon to texture |
Sets the texture polygon to the given one in image space.
poly | The polygon to texture |
Reimplemented from TexturedNode.
|
overridevirtual |
Sets the texture polygon to one equivalent to the given rect.
The rectangle will be converted into a Poly2. Unless you are constructing wireframes, there is little benefit to using a TexturedNode in this way over a normal Sprite. The option is here only for completion.
rect | The rectangle to texture |
Reimplemented from TexturedNode.
void PathNode::setStroke | ( | float | stroke | ) |
Sets the stroke width of the path.
stroke | The stroke width of the path |
|
protected |
Whether or not the polygon path is closed.
|
protected |
The shape of the two end caps of the path.
|
protected |
The extrusion polygon, when stroke > 0
|
protected |
The joint between segments of the path.
|
protected |
The stroke width of this path.