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

发需要的理由:比如开发......需要参考.........................................                                              

 

   一切都是为了开发

 

原创粉丝点击