cocos2d-x 第一篇

COCOS2d-x 入门第一篇(安装) COCOS2d-x 入门第一篇(安装) COCOS2dx安装 先说明cocos2d-x和cocos creator是两个不一样的工具,官网里下载要看清楚。那么安装cocos2d-x要具备一下三个条件。 visual studio2017(或其他可执行版本) python2.7(注意python2.x版本和3.x是完全不同的东西,并但是版本号高低) cocos2d-x压缩包 VS下载... 阅读详情
(内容重点: CCSprite, CCSpriteFrameCache, CCSpriteBatchNode, TexturePacker)

很早就开始留意 cocos2d, 但不太习惯用 Objective C, 同时也考虑到跨平台的问题, 所以一直没有正式用过, 後来有了 cocos2d-x, 就更为关注, 老想有空时拿来玩玩写点东西.

之前下载了 cocos2d-x 看了一下附带的例子, 被里边的 scene, layer, CCTextureCache, CCSpriteFrameCache 等等弄得很是混乱, 再加上工作上的事情, 就放下了, 直到上周无意中下载了一本书的 PDF, 决定再好好地学习一下, 而我发现有关 cocos2d-x 的教程并不多, 所以我就班门弄斧的和大家分享一下我的学习过程吧.

(附带一提, 这本书叫 Learn cocos2D Game Development with iOS 5, 这麽好的书当然要买正版支持, 我已经在 amazon 定购了, 正在运送途中)

学习一种新技术, 一般我会找一本较好的参考书(或资料), 先了解一下它的基本概念, 再通过实习应用来熟识.

我想不少童鞋可能是被cocos2d 超多的功能所吸引而选用它, 但其实写个一般的小遊戏并不需要知道得太多, 以下就是我想先了解的东西:

    1) cocos2d 的基本架构 (像scene, layer 等的概念)
    2) 怎样在萤幕画东西 (texture 处理, sprite 等)
    3) 操控
    4) 声效
    5) 菜单处理

这里我略为说一下关於怎样在萤幕画东西吧. 首先如往常般的建立一个 cocos2d 项目在 VC2010 Express 里 (为方便起, 我会在 Windows 平台上写和测试, 有机会再移植到 iOS 和Android):

new_project.jpg
2012-5-19 16:09:45 上传
下载附件(70.84 KB)


建立了这个叫 Demo 的项目後, 我们再把一些图抄到 Resources 里:
res.jpg
2012-5-19 16:09:46 上传
下载附件(35.76 KB)


把这些图像画到萤幕上, 最简单就是把每个图放进一个个的 CCSprite然後加到当前的 Layer 上. 以下这段代码就是把 Background.png, Grass Block.png 和 p8.png 显示在画面:

CCSize size = CCDirector::sharedDirector()->getWinSize();

CCSprite* pSprite = CCSprite::spriteWithFile("Background.png");

CC_BREAK_IF(! pSprite);

pSprite->setPosition(ccp(size.width/2, size.height/2));

this->addChild(pSprite, 0);

pSprite = CCSprite::spriteWithFile("Grass Block.png");

CC_BREAK_IF(! pSprite);

pSprite->setPosition(ccp(size.width/2, size.height/2));

this->addChild(pSprite, 0);

pSprite = CCSprite::spriteWithFile("p8.png");

CC_BREAK_IF(! pSprite);

CCSize dim =  pSprite->getContentSize();

pSprite->setPosition(ccp(size.width/2, size.height/2+dim.height/2));

this->addChild(pSprite, 0);


 程序跑起来就会看到下边这个画面:
hello.jpg

2012-5-19 16:09:44 上传
下载附件(20.27 KB)



不过我们最终的目标是把遊戏放到 iOS 或 Android 机子上玩, 所以我们不能不考虑一下有关OpenGL ES 优化的问题, 两大关键问题就是内存(显存)运用和速度.
先看一下内存问题, OpenGL ES  纹理的宽和高都要是2的倍数, 以刚才的例子来说, 虽然 Background.png 本身是 480x320, 但在载入内存後, 它其实会被变成一张 512x512 的纹理, 而Grass Block.png 则由 101x131 变成 128x256, 我们可以看到如此这样会造成不少浪费.

再看看关於渲染速度方面, OpenGL ES 上来说我们应该尽量减少渲染时切换纹理和 glDrawArray 的呼叫, 刚才的例子每画一个图像都会切换一次纹理并呼叫一次 glDrawArray , 我们这里只画3样东西, 所以不会看到有什麽问题, 但如果我们要渲染几十个甚至几百个图像 , 速度上就会被拖慢. 很明显这并不是我们所想要的.

那我们应该怎麽解决这些问题呢? 答案就是利用纹理地图(texture atlas), 比如下面这张纹理就是把我们想用的图像都合併在一起, 而它的大小正好是 512x512:

images.png
2012-5-19 16:17:38 上传
下载附件(85.36 KB)


如果人手去做这个合併工作就太痛苦了, 这里要向大家推荐一个十分好用的工具: TexturePacker! ( http://www.texturepacker.com/) 这个工具直接支持 cocos2d, 实在是太方便了!

首先我们把想要用的图像都放到一个目录里, 再用TexturePacker 的 "Add Folder"  功能把目录加进去, TexturePacker 的默认输出格式就是 cocos2d:

texturepacker1.jpg
2012-5-19 16:09:47 上传
下载附件(37.23 KB)



为了节省位置, 我们可以把Border padding 和Shape Padding 都设为1, 而选了 Allow rotation 可以让 TexturePacker 更为有效率的摆放图像在纹理里:

texturepacker2.jpg
2012-5-19 16:09:48 上传
下载附件(34.97 KB)



在键入了输出的档案名字後, 我们就可以用 Publish 把纹理输出.


接下来, 我们把输出的两个档案(我们这里的例子是images.plist 和 images.png) 放到 Resources 里, 就可以在程序里用 CCSpriteFrameCache 把纹理和有关资料载入:

cache->addSpriteFramesWithFile("images.plist", "images.png");



但现在我们只有一张叫 "images.png" 的纹理, 那麽怎样去调用比如是 Background.png 呢? 当然我们还是用 CCSprite 做渲染图像的工作, 但在建立一个 CCSprite  时, 我们换为用 spriteWithSpriteFrameName 而不是 spriteWithFile:

CCSprite* pSprite = CCSprite::spriteWithSpriteFrameName(" Background.png");

CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();

cache->addSpriteFramesWithFile("images.plist", "images.png");

// Get window size and place the label upper.

CCSize size = CCDirector::sharedDirector()->getWinSize();

CCSprite* pSprite = CCSprite::spriteWithSpriteFrameName("Background.png");

CC_BREAK_IF(! pSprite);

pSprite->setPosition(ccp(size.width/2, size.height/2));

this->addChild(pSprite, 0);

pSprite = CCSprite::spriteWithSpriteFrameName("Grass Block.png");

CC_BREAK_IF(! pSprite);

pSprite->setPosition(ccp(size.width/2, size.height/2));

this->addChild(pSprite, 0);

pSprite = CCSprite::spriteWithSpriteFrameName("p8.png");

CC_BREAK_IF(! pSprite);

CCSize dim = pSprite->getContentSize();

 pSprite->setPosition(ccp(size.width/2, size.height/2+dim.height/2));

this->addChild(pSprite, 0);

 来到这里, 我们已经逹到了节省内存和减少纹理切换, 最後一个我们想做的优化是减少 glDrawArray 的次数, 而我们所运用的技巧, 就是批次渲染(Batch Rendering), cocos2d 提供了CCSpriteBatchNode 来方便大家做有关的处理, CCSpriteBatchNode 里的CCSprite 都是要用同一个纹理的, 所以我们在建立一个 CCSpriteBatchNode 是要给它一个纹理, 再把它加到 Layer 里 :

  1. CCTexture2D *texture = CCTextureCache::sharedTextureCache()->textureForKey("images.png");
  2.                 CCSpriteBatchNode *spriteBatch = CCSpriteBatchNode::batchNodeWithTexture(texture);
  3.                 addChild(spriteBatch);
复制代码

接下来我们如常的建立各个 CCSprite, 但不同的地方是我们不把它们加在 Layer 里而是把它们直接加到 CCSpriteBatchNode 上:

  1. CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();
  2.                 cache->addSpriteFramesWithFile("images.plist", "images.png");

  3.                 CCTexture2D *texture = CCTextureCache::sharedTextureCache()->textureForKey("images.png");
  4.                 CCSpriteBatchNode *spriteBatch = CCSpriteBatchNode::batchNodeWithTexture(texture);
  5.                 addChild(spriteBatch);

  6.         // Get window size and place the label upper.
  7.         CCSize size = CCDirector::sharedDirector()->getWinSize();

  8.         CCSprite* pSprite = CCSprite::spriteWithSpriteFrameName("Background.png");

  9.         pSprite->setPosition(ccp(size.width/2, size.height/2));
  10.         spriteBatch->addChild(pSprite, 0);

  11.                 pSprite = CCSprite::spriteWithSpriteFrameName("Grass Block.png");

  12.         pSprite->setPosition(ccp(size.width/2, size.height/2));
  13.         spriteBatch->addChild(pSprite, 0);

  14.                 pSprite = CCSprite::spriteWithSpriteFrameName("p8.png");

  15.                 CCSize dim = pSprite->getContentSize();
  16.                 pSprite->setPosition(ccp(size.width/2, size.height/2+dim.height/2));
  17.         spriteBatch->addChild(pSprite, 0);
复制代码


大功告成!
这次先跟大家谈到这里, 下次再继续!

来自 http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=775&extra=page%3D1 dr_watson 

cocos2d-x-3rd-party-libs-src:cocos2d-x的依存关系 cocos2d-x第三方库 该存储库包含与cocos2d-x捆绑在一起的第三方库(二进制)的源代码。 对于cocos2d-x开发人员和/或想要: 生成特定库的更新版本(例如:将libpng 1.6.2升级到1.6.14) 将cocos2d-x移植到其他平台(例如:将其移植到Android ARM64或Tizen等) 生成所有第3方库的DEBUG版本 笔记: 我们使用MacOSX为iOS,Android,Mac和Tizen构建所有静态库。 我们使用Ubuntu构建Linux的所有静态库。 尚不支持Windows 其他配置未经测试。 没有对从Linux或Windows机器编译Android二进制文件进行测试,因此我们不知道它是否有效。 下载 $ git clone https://github.com/cocos2d/cocos2d-x-3rd-party-libs-src. 立即下载

相关推荐

cocos2d-x-3rd-party-libs-bin-metal-support-22.zip

cocos2dx 4.0引擎的依赖包。 本来需要通过引擎下download_deps.py来下载,速度较慢,传上来有需要的自己下载吧,优快云速度还行

Cocos2d-x的lua官方加密的解密方法

0x01 加密方式分析Cocos2d-x对于lua脚本加密提供了一种轻量级解决方案,加密算法是xxtea,下面是这个打包脚本cocos2d.py加密参数的说明 主要就是两个部分,sign和key,sign是加密标记,用于判断脚本是否加密,key是xxtea解密时候的秘钥,下面是Cocos2d-x部分源码这里设置了sign和key 这里就是通过对比文件开头的字符串是否为所设置的sign判断是否加密,...

哲学天空的博客 1万+

cocos2d-x-3rd-party-libs-bin.zip支持的libluajit.a文件

用xcode运行cocos2d,5s及以上的设备会崩溃在lua_open(),将下载下来的ios中的libluajit.a文件替换到自己工程就好了

OpenBird 开源项目教程

OpenBird 开源项目教程 1、项目介绍 OpenBird 是一个基于 cocos2dx 引擎的开源项目,旨在重现经典的 Flappy Bird 游戏。该项目展示了如何使用 cocos2dx 引擎创建一个简单的 2D 游戏,适合初学者学习和参考。OpenBird 项目包含了游戏的基本逻辑、图形资源和音效,开发者可以通过阅读源码和修改代码来深入理解游戏开发过程。 2、项目快速启动 环境准备 在开...

gitblog_00080的博客 398

cocos2d-x-3rd-party-libs

cocos2d-x-3rd-party-libs,quick-cocos2d-x 适配 IPV6

kaggle——信用卡欺诈检测项目实战

笔记第一步:了解题目,确定任务第二步:场景分析第三步:数据预处理看是否有缺失值查看样本类别分布数据不均衡解决办法数据值标准化/归一化第四步:特征工程1)查看特征分布情况,把不同类别下特征分布相差不大的特征删除掉2)特征缩放第五步:模型训练处理不平衡样本交叉验证求取最好的模型参数第六步:模型评估使用下采样数据训练与测试使用下采样数据训练与测试(不同的阈值对结果的影响)使用下采样数据训练,原始数据进行测试原始数据进行K折交叉验证使用原始数据进行训练和测试查看ROC曲线逻辑回归阈值选择过采样总结 第一步:了解题目

weixin_45942265的博客 1万+

Cocos2d-x学习(二十五):ubuntu 配置cocos2d-x

今天在ubuntu下编译了一下cocos2d-x(是linux版本的,不是android版本),并且在eclipse中配置了一下,在cocos2d-x官网上也看到了相关介绍,竟然发现了一个配置的小坑,可能是因为版本的原因,sqlite3库没有添加到TestCpp中。 1.工具和库 eclipse for c++ cocos2d-x 2.1.1 g++ (命令:sudo apt-get in...

445822357 178

用VASPKIT+Quantum Espresso高效绘制能带图:从K点路径生成到可视化全流程

本文详细介绍了如何整合VASPKIT与Quantum Espresso(QE)软件,构建一套高效的能带计算与可视化工作流。通过VASPKIT自动化生成高对称K点路径,结合QE完成自洽与非自洽计算,并利用gnuplot绘制发表级能带图。该流程极大提升了材料电子结构研究的效率与可重复性,是进行DFT能带计算的实用指南。

weixin_29294975的博客 163

先睹为快:Cocos2d-x v3.15正式版本发布啦!

正如我们上周推文实用教程|Android Studio安装和设置承诺的那样,Cocos2d-xv3.15版本将于4.14在论坛里发布社区版本,并于21日发布正式版本。C姐先来带大家一睹为快,过过眼瘾吧。v3.15相比前一个版本增加了许多新特性。不仅音频模块效率更高,兼容更多的Android设备,而且全面支持Android Studio。这是一个值得高度期待的全新版本! 具体列表如下 全...

Cocos的博客 173

从帧结构到数据解析:深入理解CJ/T 188 MBUS水表通信协议

本文深入解析CJ/T 188 MBUS水表通信协议,从帧结构到数据解析提供完整指南。通过典型报文示例和实战案例,详细讲解地址域、控制码、数据标识符(DI)等关键字段的解析技巧,并分享校验算法与常见错误排查方法,帮助开发者快速掌握MBUS协议在水表通信中的应用。

weixin_28710999的博客 421

微电网系列: 位移因数DPF&&功率因数PF&&过激&&欠激

文中对比了位移因数(DPF,仅基波相位)与功率因数(PF,含谐波影响)的差异,指出PF=DPF×DF(畸变因数)。过激/欠激状态对应无功功率控制:过激(容性,电流超前,抬升电压)与欠激(感性,电流滞后,抑制电压)。PCS(如光伏逆变器)需逆向调节电网无功状态,过激时发出容性无功,欠激时吸收感性无功,以维持电压。

云纳星辰怀自在 1170

第一篇 cocos2d-x学习总结

cocos2d-x菜鸟学习一个多月的总结

qufangliu的摘要 968

AI辅助需求分析与提示词生成

文章标题 《AI辅助需求分析与提示词生成》 关键词 人工智能 需求分析 提示词生成 深度学习 机器学习 强化学习 数学模型 系统架构

AI天才研究院 1212

cocos2d-x 3.2 之 2048 —— 第一篇

cocos2d-x 3.2 WIN7+VS2012 2048开发教程 第一篇

继续激情,继续奋斗。 2457

南 京 农 业 大 学 试 题 纸 附表(rape.csv)是25个油菜材料,测得每个材料的千粒重、亚油酸等的含量. (1) 对物质含量的八个指标作主成分分析,画出碎石图和主成分得分图; (2) 选

(1)请用n1

Mrrunsen的博客 497

UE5实现物体高亮描边效果(含UE相关源码浅析)

UE5实现物体高亮描边效果

专注GIS开发 7334

[MAC]学习第一篇 mac环境下的COCOS2D-X HelloWord

[暂时空]

了悟生死大事 935

15、 深入理解Akka微服务:创建与管理体育博彩平台

本博文深入探讨了如何使用Akka微服务架构为体育博彩平台创建投影和管理事件数据,包括市场投影、投注投影以及数据库投影的实现。同时,介绍了通过gRPC提供HTTP端点以供外部系统访问的方法,并详细说明了在本地环境和Kubernetes中运行应用程序的步骤及配置建议。

weixin_35756624的博客 96

Cocos2d-x3.0游戏实例之《别救我》第一篇——前言

通过这个游戏实例,可爱的你(小若:那不可爱的人呢?),可以学到以下知识点: 1. Cocos2d-x3.0物理引擎的简单使用 2. 读取Json文件作为怪物和物品配置 3. 利用Tiled地图实现可视化关卡编辑(很强大,我特别喜欢这个部分) 4. 使用Cocostudio快速创建UI 5. 吐槽 6. 利用前面五点知识制作一个简单的物理休闲游戏,缺一不可~ (小若:吐槽又是什么啊?别乱入一些奇怪的东西好吗?)

笨木头 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

cocos2d-x 3.2 之 别踩白块(第一篇)

cocos2d-x 3.2 之 别踩白块

继续激情,继续奋斗。 2717

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Cocos2d-x 3.4 之 消灭星星 >前言+第一篇<

Cocos2d-x 3.4 之 消灭星星 >前言+第一篇< > 游戏场景:星星地图 > 点击星星,处于选中状态

继续激情,继续奋斗。 4000

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

cocos2d-x(vs2012)环境搭建(第一篇)[版本:cocos2d-x-3.1.1]

来源: http://www.cocos2d-x.org/wiki/How_to_run_cpp-tests_on_Windows

其实你很简单的专栏 2496

Cocos2d-x游戏开发之第一篇《创建工程》

前言以我的工作环境配置而言,只供大家参考,请知悉!一、cocos2d-x-2.2.5如何创建一个工程1、打开cmd控制台,cd到D:\cocos2d-x-2.2.5\tools\project-creator;2、输入命令:create_project.py-projectMyGame-packagecom.gzd.game-languagecpp后,如果看到...

weixin_33716557的博客 97

MySQL表约束全解析:主键、外键、唯一与CHECK的实践指南

在数据库设计中,数据完整性是保障业务稳定运行的核心基石,而约束则是实现这一目标的关键机制。通过定义主键、唯一约束、非空约束、默认值、外键及检查约束,数据库能够在存储层强制校验数据规则,避免应用层因并发或异常导致的数据错乱。约束不仅是数据质量的守门员,还能自动生成索引以优化查询性能。无论是学生成绩管理、订单系统还是用户体系,合理运用约束都能显著减少脏数据与修复成本。本文从约束的基本类型出发,结合MySQL 8.0特性、索引关系、级联策略及常见踩坑案例,系统梳理了从建表设计到动态调整的完整路径,帮助开发者在真实

weixin_34252686的博客 253

游戏教程 如何用cocos2d-x3.0做一款塔防 第一篇

话说工欲善其事,必先利其器。下面就介绍一下wg

xxzj___yang的专栏 849
下一篇: AndroidColor
billcools
博客等级 码龄19年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值