cocox2d-x之helloworld详解
来源:互联网 发布:淘宝商城的推广 编辑:程序博客网 时间:2024/05/18 08:36
由于项目的要求开始cocox2d的学习,刚开始的时候一头雾水,一个helloworld看了一天。以前学习新环境的hello的时候也没这么费劲,现在才开始懂了点里面的门道。。。之前在这里也写过博客,但是那个博客下载积分没了,就开始换这个号了。。废话不说了,下面直接介绍程序吧。
每个cocox2d都有一个main.cpp,这个文件里面_tWinMain()就是函数的入口。。 Macros used to eliminate compiler warning generated when formal parameters or local variables are not declared.这句话涵盖了
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
这两句的作用。
AppDelegate app;
return cocos2d::CCApplication::sharedApplication().run();
上面的sharedApplication().run()是一个虚函数,AppDelegate继承了CCApplication类当执行到run()中的:
// Initialize instance and cocos2d.
if (! initInstance() || ! applicationDidFinishLaunching())
{
return 0;
}
的时候函数就进入了AppDedegate.cpp中initInstance() 及applicationDidFinishLaunching()中。initInstance()函数是处理不同平台的问题。applicationDidFinishLaunching()是处理导演类和场景的开始。
// create a scene. it's an autorelease object
CCScene *pScene = HelloWorld::scene();
// run
pDirector->runWithScene(pScene);
这两句才是我们进入helloworld的重点。
在HelloWorld::scene();中HelloWorld::node();调用了 HelloWorld::init()完成了scene的绘制********
上面就是helloworld程序的架构,刚开始学,有什么不对的地方请指教。
在HelloWorld::init()中用到了3个知识点CCMenu,CCLabelTTF,CCSprite。
1:CCMenu
Cocos2d-x for WindowsPhone:一个按钮走天下
在玩游戏的过程中,按钮可算是界面里最不可缺少的元素,可以说UI交互基本上都是各种按钮对玩家之间的交互,其实开始写的时候有点犹豫不决,到底是否要将按钮放在最前面,思量了很久之后才发现,没这个部分的例子,后面几乎都不好走下去,一些交互操作全部都可以通过按钮来完成,省去很多的讲解麻烦。
cocos2d-x引擎中提供了几个常用按钮,他们是:
CCMenuItemFont
CCMenuItemLabel
CCMenuItemImage
CCMenuItemSprite
其实还有一个CCMenuItemToggle以后再专门提它。
这些按钮都是继承自CCMenuItem,这个类在结构上表现为CCMenu的子项,CCMenu相当于菜单整合组,其实就是一个CCLayer,主要用来管理这些CCMenuItem,所以在实际用的时候,任何的CCMenuItem继承类单独添加到其他的CCNode里的时候是没有作用的,只有在CCMenu里才可以执行逻辑。
二:字体显示:
cocos2d 中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)
最近在逛论坛的时候看到有的帖子说显示文本时用 CCLabelTTF不是很好,且推荐游戏中最好别用。于是网上查了查相关资料,整理了下,顺便也分享下
在 cocos2d中有三个类可以在层或精灵中添加文字:
· CCLabelTTF
· CCLabelBMFont
· CCLabelAtlas
CCLabelTTF
CCLabelTTF 每次调用 setString(即改变文字)的时候,一个新的OPENGL纹理将会被创建.。这意味着setString和创建一个新的标签一样慢。
所以,当你需要频繁的更新它们的时候,尽可能的不用去使用标签对象。 而应该使用CCLabelAtlas或者是CCLabelBMFont。
OK,看下它的使用方法
CCLabelTTF *label = [CCLabelTTF labelWithString:@"the string" fontName:@"Marker Felt" fontSize:21];
[layer addChild:label];
label.position = ccp(100,100);
[label setString:@“change string”]; //修改文字的方法
这个类使用的是系统中的字体,不需要额外往项目文件中添加字体文件。但如果你有自定义的字体也可以加到项目中,如果无法使用,可以查看一下ccConfig.h中的CC_FONT_LABEL_SUPPORT是否enable了。
CCLabelBMFont
CCLabelBMFont 相当于每次改变只改变了图片坐标,而CCLabelTTF要重新渲染.这个类使用之前,需要添加好字体文件,包括一个图片文件 (**.png) 和一个字体坐标文件(**.fnt)。
在 cocos2d的示例项目中有现成的,可以先拿过来练习一下,找的时候注意两个文件的名称是相同的,只是扩展名不同。
CCLabelBMFont *label =[CCLabelBMFont labelWithString:@"the string" fntFile:@"konqa32-hd.fnt"];
[layer addChild:label];
label.position = ccp(100,100);
[label setString:@“change string”];
fntFile是文件名,写扩展名是 .fnt的那个。下面是 .fnt文件的截图
可以看到 .fnt文件定义了图像文件的名称,以及每个字符对应的位置信息。
这个没办法指定字体的字号,但可以用 scale 属性进行缩放来调整大小。就当它是sprite。
CCLabelAtlas
如果你用cocos2d项目模板创建过项目,那么你已经看过它的效果了,就是左下角显示帧率的数字。
因为帧率一直在变,使用CCLabelTTF的话效率太低,因为只是数字所以也犯不上使用 CCLabelBMFont 加载那么大的文字图像,所以使用这个比较合适。
CCLabelAtlas *label = [CCLabelAtlas labelWithString:@"12" charMapFile:@"fps_images.png" itemWidth:12 itemHeight:18 startCharMap:'.'];
[layer addChild:label];
label.position = ccp(100,100);
[label setString:@“34”];
在项目文件中,在resourse group里你可以找一下一个叫 fps_images.png的这个图像文件,文件如下:
所以,这个只能显示上面这个12个字符,abcd什么的就不行了。
解释一下参数,
labelWithString就是字符,
charMapFile就是字符的图像文件(这个只要图像文件就可以了),
itemWidth是每个字符的宽度,
itemHeight是每个字符的高度,这个不能设错,否则显示的时候可能就不对了。
最后一个是起始字符,它是使用这个其实字符来对应字符和图像关系的。
三:CCSprite
精灵的创建及坐标,我觉得后面肯定很重要,下次将仔细研究下。
helloworld讲解的已经差不多了,学到了很多了东西,我觉得一定有很多东西没有注意。慢慢研究。麻雀虽小,五脏俱全。
哈哈!广告,需要的可以下载一下。功能有:定时飞行模式,定时短信,定时关闭应用程序。送源码
我的应用下载地址:http://www.anzhi.com/soft_564122.html ,试玩,你觉得你如果需要源码的话,请与我联系。。
联系方式:2662368889@qq.com
发需要的理由:比如开发......需要参考.........................................
一切都是为了开发
- cocox2d-x之helloworld详解
- cocox2d-x HelloWorld分析
- cocox2d-x HelloWorld分析
- cocox2d-x CCMenuItemFon
- ios -- xcode安装cocox2d-x
- cocos2d-x Helloworld 详解
- cocos2d-x之helloworld
- Cocos2d-x之helloworld
- Cocos2d-x之helloworld
- Cocos2d-x之HelloWorld
- Cocos2d-x 之 HelloWorld
- android之helloworld详解
- android之helloworld详解
- Irrlicht之HelloWorld详解
- cocos2d-x3.x之helloWorld
- 我的Cocox2d-x游戏环境搭建组件
- Spring Boot 之 HelloWorld详解
- Spring Boot 之 HelloWorld详解
- C++第12周项目4——用函数解决素数、回文数等
- 数据结构——竞选海报
- C#客户端的异步操作
- 虚基类及其派生构造函数与析构函数u
- 经典!CSS的十八般技巧
- cocox2d-x之helloworld详解
- 数据结构——求循环节
- 第二课 Starting Another Activity
- Android Push Notification实现信息推送使用
- 在网站上添加Baidu地图
- LeetCode Edit Distance
- 给duckling网站加上cnzz网站统计信息
- lfs-笔记
- PHP简介