本节书摘来异步社区《Cocos2d 跨平台游戏开发指南(第2版)》一书中的第1章,第1.10节,作者: 【印度】Siddharth Shekar(谢卡)译者: 武传海 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.10 绘制gIPrimitives
Cocos2d使用openGLES,它是一个图形库,用来把对象显示在屏幕上。其实,到目前为止我们所有的绘图工作都依赖于这个图形库。Cocos2d也允许你访问gIPrimitives,使用它可以创建基本形状,如圆形、正方形、矩形等。
1.10.1 准备工作
现在,让我们一起看几个示例。我们将从创建一个简单的圆形开始。
1.10.2 操作步骤
在添加好hero节点之后,添加如下代码:
//drawDotNode
CCDrawNode* dotNode = [CCDrawNode node];
CCColor* red = [CCColorcolorWithRed:1.0fgreen:0.0fblue:0.0f];
[dotNodedrawDot:CGPointMake(winSize.width/2, winSize.height/2) radius:
10.0fcolor:red];
[selfaddChild:dotNode];
gIPrimitives使用CCDrawNode类创建出来。示例中,我们先新建一个CCDrawNode实例,命名为dotNode,然后创建一个CCColor类型的变量red,指定RGBA值为red。
接着,调用CCDrawNode的drawDot函数,传入圆形的创建位置,并传入圆形半径与颜色。最后,我们把dotNode添加到场景中。
1.10.3 工作原理
当你运行项目时,将在屏幕中心看到一个红色圆点。
在示例中,我们指定了圆心位置与圆形半径,Cocos2d会据此绘制圆形,并且根据我们指定的颜色填充圆形。
绘制圆形只是示例之一,我们也可以使用同样的方法绘制出其他形状,如图1-27所示。
1.10.4 更多内容
接下来,我们将看一下如何使用CCDrawNode类的drawWithPolyVerts函数绘制任意多边形。添加如下代码,替换或者注释掉DrawDot节点。
// DrawSquareNode
CCDrawNode *squareNode = [CCDrawNode node];
CGPointsquareVerts[4] =
{
CGPointMake(center.x - 50, center.y - 50),
CGPointMake(center.x - 50, center.y + 50),
CGPointMake(center.x + 50, center.y + 50),
CGPointMake(center.x + 50, center.y - 50)
};
CCColor* green = [CCColorcolorWithRed:0.0fgreen:1.0fblue:0.0f];
[squareNodedrawPolyWithVerts:squareVerts
count:4
fillColor:red
borderWidth:1
borderColor:green];
[selfaddChild:squareNode];
在上述代码中,我们先创建一个CCDrawNode类型的新节点。然后,创建一个CGPoint数组,通过squareVerts名称进行引用,数组中存储着正方形的4个顶点坐标。接下来,创建一个CCColor类型的变量green,使用RGBA值将其指定为绿色。
然后,调用drawPolyLineWithVerts,传入顶点数组,给出要绘制的顶点数,指定填充颜色为红色、边框线宽为1、边框颜色为green,green是我们之前刚刚创建出的CCColor类型变量。
最后,我们把squareNode添加到场景之中。
运行项目,我们将看到如图1-28所示的运行结果。
我们也可以使用同样的代码创建三角形。如果我们让函数绘制3个顶点,而非4个顶点,一个三角形就被绘制出来,而不是之前的正方形。
为了绘制三角形,修改代码如下,即在代码中,我们把顶点数由原来的4个改为3个。请注意,并不需要修改顶点数组。
CCColor* green = [CCColorcolorWithRed:0.0fgreen:1.0fblue:0.0f];
[squareNodedrawPolyWithVerts:squareVerts
count: 3
fillColor:red
borderWidth:1
borderColor:green];
[selfaddChild:squareNode];
再次运行项目,我们将看到如图1-29所示的变化。
事实上,借助CCDrawNode类,我们也可以在两点之间绘制线段。
为此,我们需要在绘制多边形的代码的下方,添加如下代码:
//segment node
CCColor* blue = [CCColorcolorWithRed:0.0fgreen:0.0fblue:1.0f];
CCDrawNode* segmentNode = [CCDrawNode node];
[segmentNodedrawSegmentFrom:center
to:CGPointMake(center.x + 40, center.y + 40)
radius: 2.0
color: blue];
[selfaddChild:segmentNode];
在上面代码中,我们先创建了一个CCColor类型的变量blue,用来把线段着为蓝色。然后,我们又创建了一个CCDrawNode类型的变量,命名为segmentNode。
针对segmentNode,我们调用drawSegment函数,设置绘制起点为屏幕中心,终点距离x轴为40个单位,距离y轴也是40个单位,并且设置半径为2.0,它是指线条粗细,指定线条颜色为blue。
最后,我们把节点添加到场景中。
请注意,在如图1-30所示的屏幕截图中,我修改了折线,绘制出了一个正方形,而非三角形。