《Cocos2d 跨平台游戏开发指南(第2版)》一1.10 绘制gIPrimitives

简介:

本节书摘来异步社区《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_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所示的运行结果。


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所示的变化。


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所示的屏幕截图中,我修改了折线,绘制出了一个正方形,而非三角形。


1_30

相关文章
|
3月前
|
缓存 Java 开发者
【Spring】原理:Bean的作用域与生命周期
本文将围绕 Spring Bean 的作用域与生命周期展开深度剖析,系统梳理作用域的类型与应用场景、生命周期的关键阶段与扩展点,并结合实际案例揭示其底层实现原理,为开发者提供从理论到实践的完整指导。
510 22
|
6月前
|
Web App开发 监控 前端开发
丝般顺滑:Web动画性能优化小技巧
丝般顺滑:Web动画性能优化小技巧
327 85
|
人工智能 弹性计算 安全
创新场景丨元空智能:AI 工具创业,如何抓住新时代的出海机遇
大模型创业的本质是兑现新技术价值,而乘云出海,不仅是技术的输出,更是中国创新走向世界的一次实践。
|
机器学习/深度学习 搜索推荐 算法
在数字化时代,推荐系统成为互联网应用的重要组成部分,通过机器学习技术根据用户兴趣和行为提供个性化推荐,提升用户体验
在数字化时代,推荐系统成为互联网应用的重要组成部分,通过机器学习技术根据用户兴趣和行为提供个性化推荐,提升用户体验。本文探讨了推荐系统的基本原理、常用算法、实现步骤及Python应用,介绍了如何克服数据稀疏性、冷启动等问题,强调了合理选择算法和持续优化的重要性。
530 4
|
缓存 监控 前端开发
如何确保动态导入的模块被正确加载?
通过以上这些方法的综合运用,可以有效地确保动态导入的模块被正确加载,提高应用的稳定性、性能和用户体验。在实际开发过程中,要根据项目的具体情况和需求,灵活运用这些方法,并不断进行测试和优化。
302 4
|
负载均衡 测试技术 网络安全
XiaodiSec day008 Learn Note 小迪渗透学习笔记
小迪的渗透学习笔记探讨了网络安全,包括确定目标服务厂商和网络架构(外网与内网)、端口扫描(工具如nmap和masscan)以及应对Web服务器在内网的情况。笔记还提到了旁站攻击、C段扫描、IP反查、CDN理解、WAF检测(wafw00f)、负载均衡识别(lbd)和防火墙分析,特别指出在大企业中检测的复杂性。
|
供应链 监控 安全
《区块链简易速速上手小册》第5章:智能合约(2024 最新版)
《区块链简易速速上手小册》第5章:智能合约(2024 最新版)
799 1
|
缓存 监控 算法
|
人工智能 程序员 云栖大会
盘点2023年我用过的AI大模型,国内也能免费用
盘点2023年我用过的AI大模型,国内也能免费用
886 1
 盘点2023年我用过的AI大模型,国内也能免费用