当前位置:编程学习 > wap >>

cocos2d-x魔塔20层码源和制作心得

  最近我把之前用cocos2d-iphone做的魔塔游戏用cocos2d-x重新编写了一下,这里我在文章结尾把码源提供给大家学习应为cocos2d-x接触的还不是很深,大家有什么建议或疑问尽管找我交流一下,只有大家互相学习才能进步,

这里简单说几点我在写代码的时候遇到的问题:

1、应为C++中没用像oc中的NSString(字符串类),大部分处理都是用char完成的,所以-x中封装了一个CCString,

但是很多参数传递还是(const char *string)我们就需要通过string->getCString()来获取字符。下面一个标签的创建为例子:


CCLabelTTF::create((CCString::create("勇士你好,你可以用经验值提升自己的能力"))->getCString(),"Verdana-Bold",32);

 

2、-x中类的创建都统一使用create,这点感觉还不错,不过这里我说一下在-x如何像oc中[[类名 alloc ] init]的创建方式创建,new 类名 == [类名 alloc] ,( new 过的类) ->init() ==[... init]。如下所示:


 BuyKey* buykey = newBuyKey();

 buykey->init();

不能写成BuyKey* buykey = (new BuyKey())->init();应为-x中init()方法的返回是bool类型。
3、在我们创建类的时候我们必须要添加CREATE_FUNC(类名);这样当你使用create创建时才会去调用你的init()方法。当然如果你想要自己手动调用你也可以不添加它,比如说当我们这个类需要使用到单例模式的时候,我们就不能使用create创建了,这个时候我们就不需要CREATE_FUNC(类名);

4、还有一点c++中没有类属性,就需要我们自己写setter和getter方法了,不过cocos2d-x中已经为我们写好了实现这两个方法的宏


// 定义一个int类的属性m_energy变量,该变量访问权限是protected。

        //后面的方法名Energy,即声明了一个int getEnergy()和一个 void setEnergy(int value)的方法,具体实现需要自己在cpp中定义

        CC_PROPERTY(int, m_energy, Energy);

 

        // 基本与上相同,但是get方法传引用,即声明了一个 int& getEnergy();

        CC_PROPERTY_PASS_BY_REF(int, m_energy, Energy);

 

        //同样定义变量,但是只发声明 get方法,具体实现需要自己在cpp中定义

        CC_PROPERTY_READONLY(int, m_energy, Energy);

        CC_PROPERTY_READONLY_PASS_BY_REF(int, m_energy, Energy);

 

        //同样定义变量,并且直接定义默认的get/set方法。相似的也有前4类

        CC_SYNTHESIZE(cocos2d::CCObject*, m_weapon, Weapon);

        CC_SYNTHESIZE_PASS_BY_REF(cocos2d::CCObject*, m_weapon, Weapon);

        CC_SYNTHESIZE_READONLY(cocos2d::CCObject*, m_weapon, Weapon);

        CC_SYNTHESIZE_READONLY_PASS_BY_REF(cocos2d::CCObject*, m_weapon, Weapon);

 

        // 在setWeapon的时候,调用原有m_weapon的release,并且调用新值的的retain。当然已经排除了意外情况(相等或者NULL之类的)。

        CC_SYNTHESIZE_RETAIN(cocos2d::CCObject*, m_weapon, Weapon);

CC_PROPERTY更适用于快速声明一个值属性,而CC_SYNTHESIZE更适用于声明一个对象。

如果你对这些宏不满意也可以自己实现setter和getter方法

对于数组的遍历也有相应的宏CCARRAY_FOREACH(mosterArray, object)

5、检测碰撞

对于检测碰撞-x中类似的方法Rect.intersectsRect(Rect1)检测Rect(CCRect)是否与目标区域Rect1重合。

好了暂时就先说这几点,下面我说一个没有解决的问题就是我在初始化地图的时候播放怪物行走动画后,在删除怪物图块就会崩掉,所以码源中我把这部分注释掉了,希望能够解决这个问题的朋友指点一下,我的qq:864635084
有关npc对话内容修改太麻烦那部分代码我注释掉了,有兴趣的同学可以修改一下。

这里说一下有关守卫者教程应为内容太多这里我就继续写了,不过我会在接下来写的书中进行讲解和分析

 

补充:移动开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,