cocos2d-x高仿捕鱼达人实例分析(一)

 资源:http://download.csdn.net/detail/hezeping888/5696555

开始 第一阶段内容:
本阶段我们完成项目整体结构认识,及实现与游戏主界面的简单交互:调度炮台转向

GameLayer继承自CCLayer,游戏主界面,负责承载和调度游戏中所有元素,被调度的游戏元素有:炮台,子弹,鱼儿,积分榜。
本阶段 游戏主界面完成下面工作
GameLayer:加载游戏世界背景和炮台,接受屏幕触摸事件,调度炮台转向

Cannon继承自CCObject,负责炮台的创建,并朝向指定方面发射子弹,行为分解为:转向,开火(创建Bullet并发射) 
本阶段 炮台对象完成下面工作
Cannon:负责炮台的创建,炮台行为:转向


先给出GameLayer整体的架构,见 头文件GameLayer.h:

#ifndef FishingJoyStep1_GameLayer_h

#define FishingJoyStep1_GameLayer_h


#include "cocos2d.h"

#include "Cannon.h"

  

class GameLayer : public cocos2d::CCLayer{

public:

    //构造函数不能定义为虚 参考[HG1]

    GameLayer();

    //多态基类的析构函数应该为虚函数 参考[HG2]

    virtual ~GameLayer();

    virtual bool init();

    static cocos2d::CCScene* scene();

    

    //实现触摸按下事件,主要处理炮台转向

    virtual void ccTouchesBegan(cocos2d::CCSet *pTouches,cocos2d::CCEvent *pEvent);

    virtual void ccTouchesEnded(cocos2d::CCSet *pTouches,cocos2d::CCEvent *pEvent);

    

    CC_SYNTHESIZE_RETAIN(cocos2d::CCArray *, m_pBullets, Bullets);//存储字段对象指针

    CC_SYNTHESIZE_RETAIN(cocos2d::CCArray *, m_pFishes, Fishes);//存储鱼儿对象的指针

    //CC_SYNTHESIZE_RETAIN(RollNumGroup *, m_pRollNumGroup, RollNumGroup);

    

    //用来转载鱼儿和子弹的相关资源的容器,他们分别对应加载一张资源图片

    CC_SYNTHESIZE(cocos2d::CCSpriteBatchNode *, m_pBatchNodeFish1, BatchNodeFish1);

    CC_SYNTHESIZE(cocos2d::CCSpriteBatchNode *, m_pBatchNodeFish2AndBullets, BatchNodeFish2AndBullets);

    CC_SYNTHESIZE(cocos2d::CCSpriteBatchNode *, m_pBatchNodeFish3AndNets, BatchNodeFish3AndNets);

    CC_SYNTHESIZE(cocos2d::CCSpriteBatchNode *, m_pBatchNodeFish4, BatchNodeFish4);

    

    //实现布景层的静态create函数

    CREATE_FUNC(GameLayer);

private:

     

    int m_nScore;

    

    //禁止复制

    GameLayer(const GameLayer &other);

    //将成员变量声明为private 参考[HG3]

    CC_SYNTHESIZE_RETAIN(Cannon *, m_pCannon, Cannon);

    cocos2d::CCSprite *m_pSpriteAdd;//升级炮台按钮精灵

    cocos2d::CCSprite *m_pSpriteReduce;//降级炮台精灵

    

    //载入需要用到的plist文件

    void initFrames();

    //加载游戏背景  炮台基座

    void initBackground();

    //加载捕鱼大炮

    void initCannon();

    //加载鱼儿和子弹资源

    void initFishes();

    //更新游戏整体逻辑

    void updateGame(cocos2d::CCTime dt);

    //鱼儿创建逻辑

    void updateFish(cocos2d::CCTime dt);

    //往游戏主界面中添加鱼儿

    void addFish();

    //升级大炮的型号

    void addConnonSize();

    //降级大炮型号

    void reduceConnonSize();

};

#endif

/*

 [HG1]:构造函数为什么不能是虚函数 http://www.cnblogs.com/alephsoul-alephsoul/archive/2012/12/28/2837976.html

 [HG2]:多态基类的析构函数应该为虚函数 http://www.cnblogs.com/zhuyf87/archive/2013/03/12/2955058.html

 [HG3]:将成员变量声明为private http://www.cnblogs.com/lidan/archive/2012/01/18/2325200.html

 */

 

从GameLayer.h的私有方法中,可以看出他的调度职责,4个init开头的私有方法完成游戏世界的图片资源加载,

在updateFish方法中会调用addFish方法,完成主界面鱼儿的添加。后续章节实现

在updateGame方法中完成鱼儿和子弹的碰撞检测 即引发后续业务处理,子弹爆炸,鱼儿死亡,积分榜加分等。 后续章节实现

大炮的升级和降级方法分别为:addConnonSize,reduceConnonSize,通过点击相应的精灵触发m_pSpriteAdd,m_pSpriteReduce,完成对大炮的升级和降级



Cannon继承自CCObject,负责炮台的创建,并朝向指定方面发射子弹,行为分解为:转向,开火(创建Bullet并发射) 
本阶段 炮台对象完成下面工作
Cannon:负责炮台的创建,炮台行为:转向

头文件Cannon.h:

#ifndef FishingJoyStep1_Cannon_h

#define FishingJoyStep1_Cannon_h


#include "cocos2d.h"


/*类型声明,避免过多依赖其他头文件 参考[HC1]*/

class GameLayer;


class Cannon : public cocos2d::CCObject{

public:

    /*静态创建炮台函数

     cannonType 要创建的炮台类型,根据cannon.plist文件,确定可支持的类型可选值:1、2、3、4、5、6、7

     pGame

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值