Cocos2d-x 捕鱼达人游戏学习教程(7)--添加CannonLayer炮塔层

Hi,推荐文件给你 "捕鱼达人练习例子(6).zip" http://vdisk.weibo.com/s/J1XLb


CannonLayer.h

#include "cocos2d.h"
#include "Weapon.h"
USING_NS_CC;

class CannonLayer:public CCLayer
{
    
public:
    CREATE_FUNC(CannonLayer);
    bool init();
    //声明炮塔的整合类
    CC_SYNTHESIZE_READONLY(Weapon*, _weapon, Weapon);
    //转换炮塔类型的方法
    void switchCannon(CCMenuItemSprite* sender);
    //声明2个调整炮塔等级的按钮
    CCMenuItemSprite* _subItem;
    CCMenuItemSprite* _addItem;
    
};

CannonLayer.cpp

#include "CannonLayer.h"
#include "StaticData.h"
USING_NS_CC;
bool CannonLayer::init()
{
    bool pRet = false;
    do {
        CC_BREAK_IF(!CCLayer::init());
        CCSize winSize = CCDirector::sharedDirector()->getWinSize();
        _weapon = Weapon::create();
        _weapon->setPosition(winSize.width * 0.5 , _weapon->getCannon()->getCurCannonSprite()->getContentSize().height * 0.26);
        this->addChild(_weapon);
        //设置2个按钮一个是“+”  另一个是“-”
        _subItem = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName(STATIC_DATA_STRING("button_sub")), CCSprite::createWithSpriteFrameName(STATIC_DATA_STRING("button_sub")), this, menu_selector(CannonLayer::switchCannon));
        _addItem = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName(STATIC_DATA_STRING("button_add")), CCSprite::createWithSpriteFrameName(STATIC_DATA_STRING("button_add")), this, menu_selector(CannonLayer::switchCannon));
        
        CCMenu* menu = CCMenu::create(_subItem,_addItem,NULL);
        //添加两个按钮设置他们之间的间隔是多少,从_weapon对象中先找到炮塔对象(getCannon)再找到对应的精灵getCurCannonSprite(),再找到精灵的宽。
        menu->alignItemsHorizontallyWithPadding(_weapon->getCannon()->getCurCannonSprite()->getContentSize().width + 10);
        
        menu->setPosition(ccp(winSize.width * 0.5, _subItem->getContentSize().height * 0.5));
        this->addChild(menu);
        pRet = true;
    } while (0);
    return pRet;
}

void CannonLayer::switchCannon(cocos2d::CCMenuItemSprite *sender)
{
    CannonType type = _weapon->getCannon()->getType();
    if (sender == _addItem)
    {
        type++;
    }
    else if (sender == _subItem)
    {
        type--;
    }
    _weapon->getCannon()->setType(type);
}


我们还要对GameScene类做如下修改

GameScene.h

#include "BackgroundLayer.h"

#include "FishLayer.h"

#include "CannonLayer.h"

USING_NS_CC;

class GameScene:publicCCScene

{

    

public:

    //CREATE_FUNC这个宏定义能够调用create()方法和init()方法,就是初始化的意思

    CREATE_FUNC(GameScene);

    //初始化时在这个方法中赋值

    bool init();

    //本类的析构方法

    ~GameScene();

    //载入资源的方法

    void preloadResources();

    CC_SYNTHESIZE_RETAIN(BackgroundLayer*, _backgroundLayer, BackgroundLayer);

    

    //声明鱼层类的对象

    CC_SYNTHESIZE_RETAIN(FishLayer*, _fishLayer, FishLayer);

    

    //声明炮塔层的对象

    CC_SYNTHESIZE_RETAIN(CannonLayer*, _cannonLayer, CannonLayer);

};





GameScene.cpp

bool GameScene::init()

{

    bool pRet = false;

    do {

        //调用父类的初始化方法,CC_BREAK_IF就是一个容错保护的方法

        CC_BREAK_IF(!CCScene::init());

        //调用预加载资源的方法

        this->preloadResources();

        //初始化背景层

        _backgroundLayer =BackgroundLayer::create();

        //将层添加到场景中

        this->addChild(_backgroundLayer);

        

        //初始化鱼的层

        _fishLayer = FishLayer::create();

        //将鱼的层添加到场景中

        this->addChild(_fishLayer);

        

        //创建炮塔层之后将其添加到场景中

        _cannonLayer =CannonLayer::create();

        this->addChild(_cannonLayer);


        pRet = true;

    } while (0);

    return pRet;

}






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜甲同学

感谢打赏,我会继续努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值