您的位置:首页 >> Cocos2d-x >> 和屌丝一起学cocos2dx-自己的Hello World
和屌丝一起学cocos2dx-自己的Hello World
[ 孤狼 | 2015-02-09 16:56:50 | Cocos2d-x ]

声  明


       本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。

gl.paea.cn版权所有。



头疼啊。早知道就早点睡了。哎。。。可是功课不能落下,好了开始今天的学习吧。上节我们说到“和屌丝一起学cocos2dx-Hello World”相信大家已经对cocos2dx的那个示例很熟悉了,那么这节,我们就开始自己动手来做个属于我们自己的hello world吧,这样有利于哦我们更好的去熟悉和使用这些代码和环境。


       还记得我举例子的那张图吗?

       我们今天就做这个吧。

       首先呢,就是先准备好要用的素材。一共是两个,一个是鱼,一个是海底。这里我都给大家提供了,如果你想和我做一样的,就直接下载我的素材就行了。

       素材一:

       素材二:


【一】:自己的Hello World


       首先还是新建一个项目的啦。

       名称就叫做Myhello吧。

       创建好了之后呢,我们去我们的项目文件夹下,找一个叫Resources的文件,这里呢,放着我们的所有的素材啦。

       放好了以后,我们把他们添加进我们的项目中来。

       好了,现在你看到项目中已经可以开到这两张图片了,那么接下来我们就去拜访一下 .h 文件吧。


1.MyhelloScece.h


       我们先创建一个新的 .h 文件MyhelloScece.h(在include文件夹上右键--添加--新建项)。

       那么接下来开始写我们的MyhelloScece.h文件吧。

       首先,要写上引入文件。


#ifndef __MYHELLOWORLD_SCENE_H__

#define __MYHELLOWORLD_SCENE_H__

#include "cocos2d.h"

#include "Box2D/Box2D.h"

#include "SimpleAudioEngine.h"


       估计这里有人已经看不懂了,好吧,来解释一下,最上面的 #ifndef 是if语句的变形,这里是 if not define 就是说如果没有定义后面的那个常量,就继续执行,当然了和if语句一样他有个结尾 #endif ,要判断后才执行的语句都放到中间来。这样能看懂了吧,下面的是3个引用类,就没什么好解释的了。


       写完引入文件之后呢我们开始写这个类。

       我们写个Myhello类,让他继承父类。


       class Myhello : public cocos2d::CCLayer

       {

       public:

           //初始化

           virtual bool init();  

//创建一个静态的场景函数 myscene

           static cocos2d::CCScene* myscene();

//定义一个菜单回调函数

           void menuCloseCallback(CCObject* pback);

//创建这个对象

           CREATE_FUNC(Myhello);

       };//<--最后的那个“;”别忘了<>


       最后别忘了if的结尾啊  #endif


2.MyhelloScene.cpp


       之后我们再继续创建一个新的cpp文件来调用。就起名叫MyhelloScene.cpp

       首先呢,还是一样的,要引入一些文件进来。

       #include "MyhelloScene.h"

       先把我们写好的类引进来。

       using namespace cocos2d;

       然后我们使用一下 命名空间 cocos2d。


       之后我们开始写我们的场景函数



       再之后我们开始写自己的初始化函数,顺便把回调也一起写完



3.运行


       好了全部写完之后,我们生成一下,生成成功了,OK,点击调试。

       靠!为毛的那个该死的椰子又出来了?我的鱼呢?还我 fish .......

       其实,这不怪椰子的啦。因为我们还没有改主程序呢。好了,来一起看看入口文件AppDelegate.cpp吧。

       这里呢,我还是直接在文件上注释给大家看,免得大家对不上号。


       好了那么接下来我们运行一下看看。



       哈哈,成功了。可是.....为毛文字变成乱码了。为毛啊。



【二】:字体显示


       好吧,这里还是说一下。创建字体有三种方式:CCLabelTTF、CCLabelAtlas、CCLabelBMFont

       这三种呢,第一种就是我们这里用的。但是先告诉大家,这种在大量调用的时候会很费资源,所以尽力不去用他,选择第二种或第三种来用。

       这三种方式的创建方式是:

       CCLabelTTF::create(要显示的字符串,字体名称,字体大小)

       CCLabelAtlas::create(要显示的字符串,文字图片资源名称,每个字的宽,每个字的高,字体起始标示)

       CCLabelBMFont::create(要显示的字符串,字体资源名称)


乱码问题:


       这里不得不抨击一下微软,如此巨大的编辑软件竟然不支持转码。

       解决问题的方法有很多,可以直接使用内部函数转换为UTF-8编码,也可以自己写函数来转换编码。但我这里就不用那些方法了。我比较懒,使用的是用Editplus这样的软件直接吧cpp文件修改为Utf-8编码。(.h文件不要修改,不然会出错的。)

       然后运行一下就可以看到最后的效果了。


字体问题:

       字体问题一直困扰着我好久。试过很多方法都不能奏效。这里说一下我的过程。

1.用 CCLabelTTF方法。

       CCLabelTTF * pmyLabel = CCLabelTTF::create("和屌丝一起学cocos2dx","微软雅黑",24);

       输出后,字体没有变,也没有找到有效的载入字体的方法。失败。。。

2.用 CCLabelBMFont方法。

       CCLabelBMFont* pmyLabel = CCLabelBMFont::create("和屌丝一起学cocos2dx","12.fnt");

       使用bmfont工具制作了文字的fnt文件,但是载入之后

       

       可以看到后面有黑色背景,一直去不掉。失败。。。

3.用 CCLabelAtlas方法。

       CCLabelAtlas* pmyLabel=CCLabelAtlas::create("1321", "ziti.png", 14, 21, '0');

       

       这个方法成功了,但是制作图片上比较费事。感谢Cocos2der分享的这种方法。


如果你看了本教程并知道前两种方法的使用方式的话,请联系告诉我,万分感谢。


转载请注明出处:http://gl.paea.cn/cocos2d-x/content/2015/02/09/8.html