`
mmdev
  • 浏览: 12954238 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

【地球人..学习cocos2d-x】学习实践之逐步变强的HelloWorld(上集)

 
阅读更多

1.HelloWorld之前

因为我准备按照第一篇教程里教我的东西,一步步从简单到难写成多个Demo,于是我又不想新建那么多项目,所以,是的~我们需要一个菜单界面。

要创建很难,很多步,别激动,慢慢来,噗:

  1. 首先我们需要一个CCMenu对象,它是一个菜单对象,当然菜单是可以包含子菜单的。
  2. 然后我们需要子菜单,在cocos2d-x里子菜单就是CCMenuItem,但是Item的类别有很多,在这里,我选择文字标签ItemCCMenuItemLabel
  3. CCMenu需要一个CCMenuItemLabel,同样CCMenuItemLabel它只是一个Item,而它又要作为一个标签Item,所以它需要一个标签对象:CCLabelTTF
  4. 于是,整个步骤就是,一个CCLabelTTF对象添加到一个CCMenuItemLabel对象,然后CCMenuItemLabel对象再添加到CCMenu里。

好了,废话多了,看代码:

/* 创建一个Label对象 */

CCLabelTTF* helloWorldLab1 = CCLabelTTF::create("HelloWorld1", "Arial", 35);

/* 创建一个CCMenuItemLabel对象,需要Label对象作为参数 */

CCMenuItemLabel* helloWorldItem1 = CCMenuItemLabel::create(

helloWorldLab1,

this,

menu_selector(MenuScene::showHelloWorld1));

/* 创建一个CCMenu对象,需要Item对象作为参数 */

CCMenu* menu = CCMenu::create(helloWorldItem1, NULL);

/* 最后将CCMenu菜单添加到场景中 */

this->addChild(menu);

menu_selector,没有人想好奇一下这个是什么吗?虽然它的内在原理我现在还没懂,但是我知道它相当于一个回调功能。当菜单的Item对象被点击之后,会调用

showHelloWorld1函数。也就是说,我们可以在这里设置点击菜单项之后要做的事情。

2. 第一个HelloWorld

现在来一个最简单的吧:

CCSprite* backgroundSprite = CCSprite::create("HelloWorld.png");

this->addChild(backgroundSprite);

就这样,最普通的创建一个精灵的方式。

友情提示:如果对C++语法也不熟悉的朋友(比如我,噗),最好自己一点点写,重新写一个场景类,包括它的头文件,cpp文件。

3. 第二个-使用TexturePacker打包后的图片创建精灵

关于TexturePacker的使用我就不说了,大牛的教程里讲得很详细了。另外一提,TexturePacker并不是万能的,千万不要过度依赖,本人亲测,如果用TexturePacker打包的图片有过多空白冗余的地方,将会适得其反地使得图片更加占用内存(和打包之前相比)。所以,打包的时候一定要用心,尽量减少空白的地方。

嗯,然后,为了添加第二个Demo,我需要在菜单里加入第二个Item对象,于是,看看:

/* 获取屏幕大小*/

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

CCLabelTTF* itemLab = NULL;

/* Demo1-最简单的方式创建一个精灵*/

itemLab = CCLabelTTF::create("HelloWorld1", Arial, 30);

CCMenuItemLabel* helloWorldItem1 = CCMenuItemLabel::create(

itemLab,

this,

menu_selector(MenuScene::showHelloWorld1));

/* Demo2-使用TexturePacker打包后的图片创建一个精灵*/

itemLab = CCLabelTTF::create("HelloWorld2", Arial, 30);

CCMenuItemLabel * helloWorldItem2 = CCMenuItemLabel::create(

itemLab,

this,

menu_selector(MenuScene::showHelloWorld2));

/* 创建菜单*/

CCMenu* menu = CCMenu::create();

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

/* 添加所有Item到菜单中*/

menu->addChild(helloWorldItem1);

menu->addChild(helloWorldItem2);

/* 自动按垂直方向排列子Item */

menu->alignItemsVertically();

this->addChild(menu);

前面的创建Item就不说了,我想说说红色加粗的部分,向菜单添加Item对象和向场景添加精灵的方式是一样的,用addChild就可以了,很方便。

然后,刚开始我发现直接这样add进入的Item全都挤在一起了,于是我首先想到用setPosition

,当然,结果是成功的。可是,后来我想,cocos2d-x这么强大,应该有自动排列才对的,于是我找了一下CCMenu的函数,发现了这个alignItemsVertically(),让子Item按垂直方向自动排队~很好用,噗。

然后进入正题,先打包好图片,得到两个文件:images.plistimages.png。我比较懒,直接从大牛的教程里下载的然后看代码:

/* 将图片加载到缓存池中*/

CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();

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

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

/* 使用TexturePacker打包图片后创建精灵的方式*/

CCSprite* people = CCSprite::spriteWithSpriteFrameName("p6.png");

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

this->addChild(people);

好了,你懂了,不说了。

噗,开玩笑的。CCSpriteFrameCache是缓存池,存放所有CCSpriteFrame对象的地方,用addSpriteFramesWithFile方法把打包好的图片解析成CCSpriteFrame对象,然后放到缓存池里。

于是,创建精灵的时候就直接用图片打包前各自的名字就可以了,比如下图中的箭头所指的那个图片(由于怕你们看不到它,所以我稍微多用了2个箭头,是2个么?应该是的= =):

它在打包前有自己的文件名的,叫做”p6.png”,于是,我想用这个小人图片创建一个精灵,就这样:

CCSprite* people = CCSprite::spriteWithSpriteFrameName("p6.png");

好了,这就是第二个HelloWorld了。

待续

分享到:
评论

相关推荐

    Cocos2d-x 3.x游戏开发实战pdf含目录

    Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。

    cocos2d-x3D扩展3DToolKitforcocos2d-x.zip

    3D ToolKit for cocos2dx 是一个简单的cocos2d-x 3D扩展,可以方便地在cocos2dx环境中创建3D图形。 基于cocos2d-x 2.2开发。 已实现功能: 1,向量和矩阵运算。 2,扩展的3D相机。(支持 透视投影 和 ...

    龙灵修-讲Lua的cocos2d-x进阶视频.rar

    cocos2d-x进阶教程1_2编写自己的Lua版本的HelloWorld.mp4 cocos2d-x进阶教程1_3Lua语言的注释、变量、语句块.mp4 cocos2d-x进阶教程1_4Lua中函数、条件判断语句.mp4 cocos2d-x进阶教程1_5Lua中循环语句和逻辑运算...

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    cocos2d-x 3.x游戏开发实战光盘

    cocos2d-x 3.x游戏开发实战光盘

    Cocos2d-x 3.x制作2048

    详细介绍 基于coco2d-x 3.0开发的2048,内容详细,代码整洁,适合学习。

    Cocos2d-x-3.x游戏开发之旅

    Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签

    cocos2d-x实战项目

    cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...

    cocos2d-x-2.1.5

    cocos2d-x-2.1.5

    Cocos2d-x 3.x游戏开发之旅教程及完整源码下载

    Cocos2d-x 3.x游戏开发之旅教程及完整源码下载,使用最新cocos2d-x-3.14版本,在xcode7.3上已编译通过。 解决相关问题 1、解决源程序在高版本上无法编译问题 2、解决源程序中文注释部分,xcode上显示乱码问题 使用...

    精通COCOS2D-X游戏开发 基础卷_2016.4-P399-13961841.pdf

    精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发

    cocos2d-x 3.0

    cocos2d-x 3.0 人物行走 . 包里有代码和 图片资源.

    Cocos2d-x高级开发教程

    书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关知识点。此外,书中的教学资源获得《捕鱼达人》手机游戏的授权,读者可以从一流游戏开发中高起点地...

    cocos2d-x-3.0 类图

    这是我重新弄的cocos2d-x-3.0的类图.之前别人兄台弄的,有些不全面,有些地方错误.我这个可以说是最新的了.每个类添加了中文的详细注解,同时也添加了中文的类名称翻译.这样对cocos2d-x-3.0的框架比较好上手. 有兴趣的...

    cocos2d-x事件类

    在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...

    cocos2d-1.0.1-x-0.10.0

    cocos2d-x 安装包.cocos2d-1.0.1-x-0.10.0版本。

    大富翁手机游戏开发实战基于Cocos2d-x3.2引擎

    资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...

    cocos2d-x-3.2旧版引擎下载

    cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    cocos2d-android jar包全套.zip

    如果你想用cocos2d开发android游戏,但是又不方便找包,这里就可以为你提供cocos2d开发的所有相关包,解压后得到libs文件夹即可。

Global site tag (gtag.js) - Google Analytics