Cocos2d-X directly using OpenGL Interface
Cocos2d-X is based on OpenGL ES 2D game engine, so Cocos2d-X can directly use OpenGL Interface
First, create a Draw class for processing OpenGL interfaces.
Add the following code to Draw. h:
#ifndef _Draw_H_#define _Draw_H_#include "cocos2d.h"USING_NS_CC;class Draw : public CCLayer{public: static CCScene* scene(); CREATE_FUNC(Draw); bool init(); void draw();};#endif
Example 1: Draw a vertex Using OpenGL Interface
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2); // point: the default size is one pixel, and the value is white. // ccPointSize sets the size of the Point ccPointSize (25); // ccDrawColor4B sets the color of the Point ccDrawColor4B (255, 0, 0,255); // set the ccDrawPoint (center );}
Execution result:
Example 2: draw a line using OpenGL Interface
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2);/* center. x = winSize. width/2 center. y = winSize. height/2 * // line: The default value is a pixel width, and the color ccDrawColor4B (255,255, 0,255) is white ); // glLineWidth is the function glLineWidth (5) for setting the line width; ccDrawLine (center, // The Position of the starting point ccpAdd (center, ccp (100,100) // The Position of the midpoint ); /* ccpAdd (center, ccp (100,100) indicates center. x + 100, center. y + 100 */}
Execution result:
Example 3: Use the OpenGL interface to draw multiple points
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2);/* center. x = winSize. width/2 center. y = winSize. height/2 * // set the color of the vertex ccDrawColor4B (255, 0, 0,255); // defines the position of the saved vertex in an array CCPoint pts [] = {CCPoint (100,100 ), CCPoint (100,200), CCPoint (200,200), CCPoint (200,100)}; // painting point ccDrawPoints (pts, 4 );}
Execution result:
Example 4: use OpenGL to draw a circle with a center link
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2);/* center. x = winSize. width/2 center. y = winSize. height/2 * // set the circle color ccDrawColor4B (192,192, 0,255);/* draw the circle parameter 1: center parameter 2: radius parameter 3: parameter 4: Number of line segments, parameter 5: whether to link the center */ccDrawCircle (center, 3.14, 180, 100, true );}
Execution result:
Example 5: use OpenGL to draw a circle without a center link
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2);/* center. x = winSize. width/2 center. y = winSize. height/2 * // set the circle color ccDrawColor4B (192,192, 0,255);/* draw the circle parameter 1: center parameter 2: radius parameter 3: parameter 4: Number of line segments, parameter 5: whether to link the center */ccDrawCircle (center, 3.14, 180, 100, false );}
Execution result:
Example 6: use OpenGL to draw a closed polygon
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2);/* center. x = winSize. width/2 center. y = winSize. height/2 * // set the color of the vertex ccDrawColor4B (192,192, 0,255); // defines the position of the saved vertex in an array CCPoint pts [] = {CCPoint (100,100 ), CCPoint (100,200), CCPoint (200,200), CCPoint (200,100), CCPoint (150, 50)}; // draw the enclosed polygon ccDrawPoly (pts, 5, true );}
Execution result:
Example 7: Use the OpenGL interface to draw a non-sealing Polygon
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2);/* center. x = winSize. width/2 center. y = winSize. height/2 * // set the color of the vertex ccDrawColor4B (192,192, 0,255); // defines the position of the saved vertex in an array CCPoint pts [] = {CCPoint (100,100 ), CCPoint (100,200), CCPoint (200,200), CCPoint (200,100), CCPoint (150, 50)}; // draw the enclosed polygon ccDrawPoly (pts, 5, false );}
Execution result:
Example 8: use OpenGL to draw a solid Polygon
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2);/* center. x = winSize. width/2 center. y = winSize. height/2 * // set the color of the vertex ccDrawColor4B (192,192, 0,255); // define the position of the saved vertex in the array CCPoint pts2 [] = {CCPoint (300,100 ), CCPoint (400,200), CCPoint (400,300)}; // draw a solid polygon ccDrawSolidPoly (pts2, 3, ccc4f (1, 0, 0, 1 ));}
Execution result:
Example 9: Use the OpenGL interface to implement the bezr Curve
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2);/* center. x = winSize. width/2 center. y = winSize. height/2 * // set the color of the vertex ccDrawColor4B (192,192, 0,255); // define the position of the saved vertex in the array CCPoint pts2 [] = {CCPoint (300,100 ), CCPoint (400,200), CCPoint (400,300)}; // beestimated curve // Second-Order beestimated curve ccdrawquadbeestimated (pts2 [0], pts2 [1], pts2 [2], 10 );}
Execution result:
Example 10: Use the OpenGL interface to implement a second-order bezr Curve
Add the following code to Draw. cpp:
# Include "Draw. h "CCScene * Draw: scene () {CCScene * s = CCScene: create (); Draw * layer = Draw: create (); s-> addChild (layer); return s;} bool Draw: init () {CCLayer: init (); return true;} void Draw: draw () {// get the window size CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinates CCPoint center = ccp (winSize. width/2, winSize. height/2);/* center. x = winSize. width/2 center. y = winSize. height/2 * // define the position of the point where the array is saved. CCPoint pts [] = {CCPoint (100,100), CCPoint (100,200), CCPoint (200,200), CCPoint (200,100 )}; // define the position of the point where the array is saved. CCPoint pts2 [] = {CCPoint (300,100), CCPoint (400,200), CCPoint (400,300 )}; // bezr curve // Second-Order bezr curve ccdrawquadbezr (pts2 [0], pts2 [1], pts2 [2], 10); ccDrawColor4B (90, 90,255,255 ); ccdrawcubicbezr (pts [0], pts [1], pts2 [2], pts [3], 10 );}
Execution result:
Zookeeper
Example 11: use OpenGL to draw a polygon by clicking the mouse
First, create an ActiveDraw class for processing OpenGL interfaces.
Add the following code to ActiveDraw. h:
# Ifndef _ ActiveDraw_H __# define _ ActiveDraw_H __# include "cocos2d. h "USING_NS_CC; class ActiveDraw: public CCLayer {public: static CCScene * scene (); CREATE_FUNC (ActiveDraw); bool init (); // set the touch event bool ccTouchBegan (CCTouch *, CCEvent *); // Save the CCPoint _ pts [100]; // record the valid touch point int _ ptsCount; void draw () ;}; # endif
Add the following code to ActiveDraw. cpp:
# Include "ActiveDraw. h "CCScene * ActiveDraw: scene () {CCScene * s = CCScene: create (); s-> addChild (ActiveDraw: create (); return s ;} bool ActiveDraw: init () {CCLayer: init (); // process the touch event setTouchEnabled (true); setTouchMode (kCCTouchesOneByOne); _ ptsCount = 0; return true ;} bool ActiveDraw: ccTouchBegan (CCTouch * touch, CCEvent * ev) {// obtain the coordinates of the touch point CCPoint pt = touch-> getLocation (); // save the coordinates to the array. _ pts [_ ptsCount ++] = pt; return true;} void ActiveDraw: draw () {// obtain the window size. CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the position of the vertex. CCPoint center = ccp (winSize. width/2, winSize. height/2); // draw a polygon ccDrawPoly (_ pts, _ ptsCount, true );}
Execution result:
Example 11: use OpenGL to draw a polygon 2.0 by clicking the mouse
First, create an ActiveDraw class for processing OpenGL interfaces.
Add the following code to ActiveDraw. h:
# Ifndef _ ActiveDraw_H __# define _ ActiveDraw_H __# include "cocos2d. h "USING_NS_CC; class ActiveDraw: public CCLayer {public: static CCScene * scene (); CREATE_FUNC (ActiveDraw); bool init (); // set the touch event bool ccTouchBegan (CCTouch *, CCEvent *); // Save the CCPoint _ pts [100]; // record the valid touch point int _ ptsCount; // define the sprite * _ sprite; void draw () ;};# endif
Add the following code to ActiveDraw. cpp:
# Include "ActiveDraw. h "CCScene * ActiveDraw: scene () {CCScene * s = CCScene: create (); s-> addChild (ActiveDraw: create (); return s ;} bool ActiveDraw: init () {CCLayer: init (); // process the touch event setTouchEnabled (true); setTouchMode (kCCTouchesOneByOne); _ ptsCount = 0; // create genie _ sprite = CCSprite: create (); addChild (_ sprite); return true;} bool ActiveDraw: ccTouchBegan (CCTouch * touch, CCEvent * ev) {// obtain the coordinate CCPoint pt = touch-> getLocation (); _ pts [_ ptsCount ++] = pt; // obtain the window size. CCSize winSize = CCDirector:: sharedDirector ()-> getWinSize (); // set the sprite position (the sprite position is a random position) _ sprite-> setPosition (ccp (winSize. width * CCRANDOM_0_1 (), winSize. height * CCRANDOM_0_1 (); return true;} void ActiveDraw: draw () {// obtain the window size. CCSize winSize = CCDirector: shareddire () -> getWinSize (); // set the position of the vertex CCPoint center = ccp (winSize. width/2, winSize. height/2); // draw a polygon ccDrawPoly (_ pts, _ ptsCount, true); if (_ sprite) {// draw a circular ccDrawCircle (_ sprite-> getPosition (), 20, 0,100, true );}}
Execution result:
Bytes
Example 12: use OpenGL to draw a line segment
First, create a DrawNode class for processing OpenGL interfaces.
Add the following code to DrawNode. h:
#ifndef _DrawNode_H_#define _DrawNode_H_#include "cocos2d.h"USING_NS_CC;class DrawNode : public CCLayer{public: static CCScene* scene(); CREATE_FUNC(DrawNode); bool init();};#endif
Add the following code to DrawNode. cpp:
# Include "DrawNode. h "CCScene * DrawNode: scene () {CCScene * s = CCScene: create (); DrawNode * layer = DrawNode: create (); s-> addChild (layer); return s;} bool DrawNode: init () {// initialize the parent class CCLayer: init (); // create DrawNode CCDrawNode * node = CCDrawNode: create (); // obtain the window size. CCSize winSize = CCDirector: sharedDirector ()-> getWinSize (); // set the coordinate CCPoint center = ccp (winSize. width/2, winSize. height/2); // set the node position node-> setPosition (center); // draw a line segment node-> drawSegment (ccp (0, 0 ), ccp (100,100), 2, ccc4f (1, 0, 0, 1); // Add node addChild (node); return true ;}
Execution result: Too Many Rows exist.