制作一个简单的游戏---cocos2d-x-2.2.0

参考网络视频资源,作者blog网址是:http://blog.csdn.net/s_xing

另外一个也写了这个游戏的简单实现的网址:http://blog.csdn.net/akof1314/article/details/8268882

环境 xp + cocos2d-x-2.2.0 + vs2010

游戏源码资源下载地址 点击打开链接

游戏最终运行效果如图示:


1. 新建项目

参考新建项目 SimpleGame

2. 提交资源以及显示第一个精灵

        修改 HelloWorldScene.h 将类 HelloWorld 从原来的继承 CCLayer 改为继承于 CCLayerColor

        将 HelloWorldScene.cpp 文件中的 init 改为如下的内容

bool HelloWorld::init()
{
    if ( !CCLayerColor::initWithColor(ccc4(0, 255, 0, 255)))
    {
        return false;
    }
    CCSize screenSize = CCDirector::sharedDirector()->getWinSize();
    CCSprite *player = CCSprite::create("Player.png");
    player->setPosition(ccp(20, screenSize.height/2));
    this->addChild(player);
    
    return true;
}

        编译运行即可出现第一个精灵。

3. 增加怪物精灵

        修改 HelloWorldScene.h,在类里增加如下成员变量和成员函数

    void responseFunc(CCObject *obj);
    void myDefine(CCNode *who);
    void createTarget();
    void gameLogic(float dt);

    cocos2d::CCSprite *target;

        在 HelloWorldScene.cpp中实现以上的成员函数

void HelloWorld::gameLogic(float dt)
{
    this->createTarget();
}

void HelloWorld::createTarget()
{
    CCSize screenSize = CCDirector::sharedDirector()->getWinSize();
    CCSprite *myTarget = CCSprite::create("Target.png");
    int y = rand() % (int)(screenSize.height);
    myTarget->setPosition(ccp(screenSize.width, y));
    this->addChild(myTarget);
    CCMoveTo *move = CCMoveTo::create(2, ccp(0, y));
    CCCallFuncN *disappear = CCCallFuncN::create(this, callfuncN_selector(HelloWorld::myDefine));
    CCSequence *actions = CCSequence::create(move, disappear, NULL);
    myTarget->runAction(actions);
}

void HelloWorld::responseFunc(CCObject *obj)
{
    //CCLOG("hello shopping");
    CCMoveTo *move = CCMoveTo::create(2, ccp(0, 80));
    CCCallFuncN *disappear = CCCallFuncN::create(this, callfuncN_selector(HelloWorld::myDefine));
    CCSequence *actions = CCSequence::create(move, disappear, NULL);
    target->runAction(actions);
}

void HelloWorld::myDefine(CCNode *who)
{
    //who->setPosition(ccp(40,0));
    //who->setScale(2);
    who->removeFromParentAndCleanup(true);
}

        并在 init 中增加语句     this->schedule(schedule_selector(HelloWorld::gameLogic),2);

        编译运行即可出现怪物了。

4. 添加可以发射的飞镖

        修改 HelloWorldScene.h,在类里增加如下成员变量和成员函数

    bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    void registerWithTouchDispatcher();

         HelloWorldScene.cpp 中实现以上的成员函数

bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    return true;
}

void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{

}

void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
    CCPoint locInView = pTouch->getLocationInView(); 
    CCPoint loc = CCDirector::sharedDirector()->convertToGL(locInView);

    if(loc.x <= 20)
    {
        return;
    }

    CCSize screenSize = CCDirector::sharedDirector()->getVisibleSize();
    CCSprite *proj = CCSprite::create("Projectile.png");
    proj->setPosition(ccp(20,screenSize.height/2));
    this->addChild(proj);

    double dx = loc.x - 20;
    double dy = loc.y - screenSize.height/2;
    double d = sqrt(dx*dx + dy*dy);
    double D = sqrt(screenSize.width*screenSize.width + screenSize.height*screenSize.height); 
    double ratio = D/d;
    double endx = ratio*dx + 20;
    double endy = ratio*dy + screenSize.height/2;

    CCMoveTo *moveto = CCMoveTo::create(D/320, ccp(endx,endy));
    CCCallFuncN *moveFinish = CCCallFuncN::create(this,callfuncN_selector(HelloWorld::myDefine));
    CCSequence *action = CCSequence::create(moveto, moveFinish, NULL);
    proj->runAction(action);

}

void HelloWorld::registerWithTouchDispatcher()
{
    CCDirector *pDirector=CCDirector::sharedDirector();
    pDirector->getTouchDispatcher()->addTargetedDelegate(this,0,true);
}

         并在 init 中增加语句     this->setTouchEnabled(true);

        编译运行,点击窗口即可出现飞镖

5. 增加碰撞检测 飞镖可以打死怪物

        修改 HelloWorldScene.h,在类里增加如下成员变量和成员函数

    ~HelloWorld();
    void update(float delta);
    cocos2d::CCArray *_targets;
    cocos2d::CCArray *_projs; 

        HelloWorldScene.cpp中初始化以上的成员变量以及实现以上的成员函数

HelloWorld::~HelloWorld()
{
    if(_projs != NULL)
    {
        _projs->release();
    }

    if(_targets != NULL)
    {
        _targets->release();
    }
}

void HelloWorld::update(float delta)
{
    CCObject *itarget, *iproj;
    CCArray *targetToDelete = new CCArray;
    CCArray *projToDelete = new CCArray ;

    CCARRAY_FOREACH(_targets, itarget)
    {
        CCSprite *target = (CCSprite*)itarget;

        CCARRAY_FOREACH(_projs, iproj)
        {
            CCSprite *proj = (CCSprite*)iproj;
            if(target->boundingBox().intersectsRect(proj->boundingBox()))
            {
                projToDelete->addObject(iproj);
                targetToDelete->addObject(itarget);
            }
        }
    }
    CCARRAY_FOREACH(projToDelete, iproj)
    {
        _projs->removeObject(iproj);
        CCSprite *proj = (CCSprite *)iproj;
        proj->removeFromParentAndCleanup(true);
    }

    CCARRAY_FOREACH(targetToDelete, itarget)
    {
        _targets->removeObject(itarget);
        CCSprite *target = (CCSprite *)itarget;
        target->removeFromParentAndCleanup(true);
    }

    targetToDelete->release();
    projToDelete->release();
}

        在 init 中增加语句

    this->schedule(schedule_selector(HelloWorld::update));
    _projs = new CCArray;
    _targets = new CCArray;

        在 ccTouchEnded 增加语句

    _projs->addObject(proj);
    proj->setTag(2);
        在 createTarget  增加语句

    _targets->addObject(myTarget);
    myTarget->setTag(1);

        在 myDefine  增加语句

    int tag = who->getTag();

    if(tag == 1)
    {
        _targets->removeObject(who);
    }
    else if(tag == 2)
    {
        _projs->removeObject(who);  
    }

编译运行,点击窗口,射出的飞镖可以将怪物打死了。

好了,一个简单的游戏就完成了。

        



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值