zoukankan      html  css  js  c++  java
  • 1.cocos2dx存储卡的游戏代码、而游戏移植到“华为荣耀”电话、问题的总结移植

    

    1记忆卡片游戏代码

    CardItem.h

    #pragmaonce

    #ifndef__CardItem_H__

    #define__CardItem_H__

     

    #include"cocos2d.h"

    USING_NS_CC;

     

    classCardItem :publicCCSprite

    {

    public:

       staticCardItem *create(intidx);

       boolinit(intidx);

     

       CCLabelTTF *ttf;

       CCSprite *bg;

       CC_SYNTHESIZE(int,_index,Idx);

     

       voidshowWhite();

       voidshowText();

    };

     

    #endif

    CardItem.cpp

    #include"CardItem.h"

     

    CardItem *CardItem::create(intidx)

    {

       CardItem *pRet =newCardItem;

       if (pRet &&pRet->init(idx))

       {

           pRet->autorelease();

       }

       else

       {

           deletepRet;

           pRet =NULL;

       }

       returnpRet;

    }

     

    boolCardItem::init(intidx)

    {

       CCSprite::init();

       setIdx(idx);

     

       setContentSize(CCSizeMake(80,80));

       setAnchorPoint(ccp(0,0));

     

       //设置字体

       CCString *str =CCString::createWithFormat("%d",idx);

       ttf =CCLabelTTF::create(str->getCString(),"Courier New", 50);

       ttf->setPosition(ccp(40, 40));

       this->addChild(ttf);

     

       bg =CCSprite::create();

       bg->setTextureRect(CCRectMake(0,0,77,77));

       bg->setAnchorPoint(ccp(0,0));

       bg->setColor(ccc3(255,255,255));

       this->addChild(bg);

     

       returntrue;

    }

     

    voidCardItem::showWhite()

    {

       ttf->setVisible(false);

       bg->setVisible(true);

    }

     

    voidCardItem::showText()

    {

       ttf->setVisible(true);

       bg->setVisible(false);

    }

    LayerGame.h

    #ifndef__LayerGame_H__

    #define__LayerGame_H__

     

    #include"cocos2d.h"

    #include"vector"

    usingnamespacestd;

    USING_NS_CC;

     

    classLayerGame :publicCCLayer

    {

    public:

       staticCCScene *scene(intdegree);

       staticLayerGame *create(intdegree);

       boolinit(intdegree);

     

       voidgetAllPoint();

       voidgetAvailablePoint();

       voidaddCard();

       voidshowCardAllWhite();

     

       CCPointArray *allPoints;

       CCArray     *allCards;

       vector<int>vec;

     

       CC_SYNTHESIZE(int,_degere, Degree);

       CC_SYNTHESIZE(int,_clickStart, ClickStart);

     

       virtualboolccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);

    };

     

    #endif

    LayerGame.cpp

    #include"LayerGame.h"

    #include"CardItem.h"

    #include"stdlib.h"

    #include"time.h"

    #include"LayerOver.h"

    #include"cocos-ext.h" //支持声音的

    #include"SimpleAudioEngine.h"

    usingnamespace CocosDenshion;

    USING_NS_CC_EXT;       //放开扩展库

     

    CCScene *LayerGame::scene(intdegree)

    {

       CCScene *scene =CCScene::create();

       LayerGame *layer =LayerGame::create(degree);

       scene->addChild(layer);

       returnscene;

    }

     

    LayerGame *LayerGame::create(intdegree)

    {

       LayerGame *pRet =newLayerGame;

       if (pRet &&pRet->init(degree))

       {

           pRet->autorelease();

       }

       else

       {

           deletepRet;

           pRet =NULL;

       }

       returnpRet;

    }

     

    boolLayerGame::init(intdegree)

    {

       CCLayer::init();

     

       setDegree(degree);

       setClickStart(0);

       getAllPoint();

       getAvailablePoint();

       addCard();

     

       setTouchEnabled(true);

       setTouchMode(kCCTouchesOneByOne);

     

       SimpleAudioEngine::sharedEngine()->preloadEffect("boom.mp3");

     

       returntrue;

    }

     

    voidLayerGame::getAllPoint()

    {

       allPoints =CCPointArray::create(60);

       allPoints->retain();

       for (inti = 0;i < 10;i++)

       {

           for (intj = 0;j < 6;j++)

           {

               allPoints->addControlPoint(ccp(80 * i,80 *j));

           }

       }

    }

     

    //获得要作为游戏点的point

    voidLayerGame::getAvailablePoint()

    {

       srand(time(NULL));

       while (1)

       {

           intidx =rand() % 60;

           vector<int>::iteratoritr =vec.begin();

           for (;itr !=vec.end(); ++itr)

           {

               if (*itr ==idx)

                   break;

           }

           if (itr ==vec.end())

           {

               vec.push_back(idx);

               if (vec.size() == getDegree())

                   break;

           }

       }

    }

     

    voidLayerGame::addCard()

    {

       allCards =CCArray::create();

       allCards->retain();

       for (inti = 0;i <getDegree();i++)

       {

           CardItem *item =CardItem::create(i);

           item->setPosition((CCPoint)allPoints->getControlPointAtIndex(vec[i]));

           addChild(item);

           item->showText();

           allCards->addObject(item);

       }

    }

     

    voidLayerGame::showCardAllWhite()

    {

       CCObject *obj;

       CCARRAY_FOREACH(allCards,obj)

       {

           CardItem *spr = (CardItem *)obj;

           spr->showWhite();

       }

    }

     

    boolLayerGame::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent)

    {

       for (inti = 0;i <allCards->count();i++)

       {

           //推断是否点中

           if (((CardItem*)allCards->objectAtIndex(i))->boundingBox().

               containsPoint(pTouch->getLocation()))

           {

               showCardAllWhite();

               SimpleAudioEngine::sharedEngine()->playEffect("boom.mp3");

               if (getClickStart() == ((CardItem*)allCards->objectAtIndex(i))->getIdx())

               {

                  ((CardItem*)allCards->objectAtIndex(i))->removeFromParentAndCleanup(true);

                   allCards->removeObjectAtIndex(i);

                   if (allCards->count() == 0)

                   {

                       CCScene *scene =LayerOver::scene(true);

                       CCDirector::sharedDirector()->replaceScene(scene);

                       CCLog("you win game");

                   }

               }

               else

               {

                   CCScene *scene =LayerOver::scene(false);

                   CCDirector::sharedDirector()->replaceScene(scene);

                   CCLog("you lose game");

               }

               _clickStart++;

           }

       }

       returntrue;

    }

    LayerOver.h

    #ifndef__LayerOver_H__

    #define__LayerOver_H__

     

     

    #include"cocos2d.h"

    USING_NS_CC;

     

     

    classLayerOver :publicCCLayer

    {

    public:

       staticCCScene *scene(boolres);

       staticLayerOver *create(boolres);

       boolinit(boolres);

     

       voidmenuCallBack(CCObject * obj);

    };

     

    #endif

    LayerOver.cpp

    #include"LayerOver.h"

    #include"LayerStart.h"

     

     

    CCScene *LayerOver::scene(boolres)

    {

       CCScene *scene =CCScene::create();

       LayerOver *layer =LayerOver::create(res);

       scene->addChild(layer);

       returnscene;

    }

    LayerOver *LayerOver::create(boolres)

    {

       LayerOver *pRet =newLayerOver();

       if (pRet &&pRet->init(res))

       {

           pRet->autorelease();

       }

       else

       {

           deletepRet;

           pRet =NULL;

       }

       returnpRet;

    }

    boolLayerOver::init(boolres)

    {

       CCLayer::init();

     

       CCMenu *menu =CCMenu::create();

       CCMenuItem *back =CCMenuItemFont::create("Back",this,menu_selector(LayerOver::menuCallBack));

     

       if (res ==true)

       {

           CCMenuItem *winItem =CCMenuItemFont::create("You Win");

           menu->addChild(winItem);

           menu->addChild(back);

       }

       else

       {

           CCMenuItem *failItem =CCMenuItemFont::create("You Failed");

           menu->addChild(failItem);

           menu->addChild(back);

       }

     

       addChild(menu);

       menu->alignItemsVerticallyWithPadding(30);

     

     

       returntrue;

    }

     

     

    voidLayerOver::menuCallBack(CCObject *obj)

    {

       CCScene *scene =LayerStart::scene();

       CCDirector::sharedDirector()->replaceScene(scene);

    }

    LayerStart.h

    #ifndef__LayerStart_H__

    #define__LayerStart_H__

     

    #include"cocos2d.h"

    USING_NS_CC;

    classLayerStart :publicCCLayer

    {

    public:

       CREATE_FUNC(LayerStart);

       staticCCScene *scene();

       boolinit();

     

       voideasy(CCObject * obj);

       voidhard(CCObject * obj);

       voidveryHard(CCObject * obj);

       voidquit(CCObject * obj);

     

       enumDEGREE

       {

           EASY = 5,HARD = 7,VERYHARD = 9

       };

    };

     

    #endif

    LayerStart.cpp

    #include"LayerStart.h"

    #include"LayerGame.h"

     

    CCScene *LayerStart::scene()

    {

       CCScene *scene =CCScene::create();

       LayerStart *layer =LayerStart::create();

       scene->addChild(layer);

       returnscene;

    }

     

    boolLayerStart::init()

    {

       CCLayer::init();

       CCMenuItem *easyItem =CCMenuItemFont::create("Easy",this,

           menu_selector(LayerStart::easy));

       CCMenuItem *hardItem =CCMenuItemFont::create("Hard",this,

           menu_selector(LayerStart::hard));

       CCMenuItem *veryHardItem =CCMenuItemFont::create("VeryHard",

           this,menu_selector(LayerStart::veryHard));

       CCMenuItem *quitItem =CCMenuItemFont::create("Quit",this,

           menu_selector(LayerStart::quit));

     

       CCMenu *menu =CCMenu::create(easyItem,hardItem,veryHardItem,quitItem,NULL);

     

       menu->alignItemsVerticallyWithPadding(30);

       addChild(menu);

     

       returntrue;

    }

     

    voidLayerStart::easy(CCObject * obj)

    {

       CCScene *scene =LayerGame::scene(EASY);

       CCDirector::sharedDirector()->replaceScene(scene);

    }

     

    voidLayerStart::hard(CCObject * obj)

    {

       CCScene *scene =LayerGame::scene(HARD);

       CCDirector::sharedDirector()->replaceScene(scene);

    }

     

    voidLayerStart::veryHard(CCObject * obj)

    {

       CCScene *scene =LayerGame::scene(VERYHARD);

       CCDirector::sharedDirector()->replaceScene(scene);

    }

     

    voidLayerStart::quit(CCObject * obj) {

       exit(1);

    }

    执行结果:

    点击进入Easy后的效果:

    失败后的效果:

    2记忆卡片手机移植

    环境准备:所需软件:

    32位:

    64

    软件安装(注意不要有中文文件夹)

    1.      安装JDK

    jdk-7u25-windows-i586.exe

    2.      安装安卓SDK

    3.      安装安装NDK

    4.      打开(F:TransPlantadt-bundle-windows-x86-20140321eclipseeclipse.exe):

    效果图例如以下:

    game游戏项目导入,导入录入路径:E:Installedcocos2d-x-2.2.3projectsgameproj.android

    点击:File -- >Import

    执行结果:

     

    5安装cygin。从官网(http://cygwin.com/install.html)上下载cygwin.

    下载后软件:

    A双击上面的64位或者32位的软件进行安装。

    这里选择64位进行安装。

    配置cygwin.

    A改动:cygwin64etc中的fstab,将最后一行凝视掉,而换成例如以下的配置:

    none /cygdrive cygdrive binary,noacl,posix=0,user 0 0

     

    左面cygwin的执行效果图例如以下:

    6配置环境变量

    Cygwin载入系统路径到Eclipse本地路径中。

    解决bash找不到的问题。打开Eclipse->windows-preference看到例如以下配置:

    改动Androidmakefile

    8配置项目中的build_native.sh文件,加上:

    chmod 777 "$APP_ANDROID_ROOT"/assets -R

    9导入cocos2dx的另外一个Android应用,仅仅有这样才干让本项目执行起来

    载入路径是:E:Installedcocos2d-x-2.2.3cocos2dxplatformandroidjava

    点击确定。

    导入后的截图:

     

    8 将游戏移植到手机。将手机USB线接上电脑(注意,不要使用Android模拟器进行执行,cocos2dxAndroid模拟器上执行由问题)。

    右击game项目Android项目进行run(这里以华为荣耀作为測试机)。

    执行效果:

    从以下game即使移植到华为荣耀手机上的cocos2d-x记忆卡片游戏


    打开bin。拷贝bak文件就可以用:



    7 横屏、竖屏设置

    androidAndroidManifest.xml文件里:

    screenOrientation="landscape"为横屏,

    screenOrientation="portrait"为竖屏

     

    移植错误总结:

    [2014-10-23 17:11:41 - myhello] Unable to resolve target 'android-8'

    [2014-10-23 17:24:58 - libcocos2dx] Unable to resolve target 'android-8'

    [2014-10-23 17:33:15 - SDK Manager] Created AVD 'AVD19' based on Android 4.4.2, ARM (armeabi-v7a) processor,

    [2014-10-23 17:33:15 - SDK Manager] with the following hardware config:

    [2014-10-23 17:33:15 - SDK Manager] disk.dataPartition.size=200M

    [2014-10-23 17:33:15 - SDK Manager] hw.accelerometer=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.audioInput=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.battery=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.camera.back=none

    [2014-10-23 17:33:15 - SDK Manager] hw.dPad=no

    [2014-10-23 17:33:15 - SDK Manager] hw.device.hash2=MD5:b1157894a81a9869f18a16ee4591a709

    [2014-10-23 17:33:15 - SDK Manager] hw.device.manufacturer=Generic

    [2014-10-23 17:33:15 - SDK Manager] hw.device.name=3.2in HVGA slider (ADP1)

    [2014-10-23 17:33:15 - SDK Manager] hw.gps=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.keyboard=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.keyboard.lid=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.lcd.density=160

    [2014-10-23 17:33:15 - SDK Manager] hw.mainKeys=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.ramSize=512

    [2014-10-23 17:33:15 - SDK Manager] hw.sdCard=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.sensors.orientation=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.sensors.proximity=yes

    [2014-10-23 17:33:15 - SDK Manager] hw.trackBall=no

    [2014-10-23 17:33:15 - SDK Manager] skin.dynamic=no

    [2014-10-23 17:33:15 - SDK Manager] vm.heapSize=16

    [2014-10-23 17:35:56 - myhello]    (skipping file '.gitignore' due to ANDROID_AAPT_IGNORE pattern '.*')

    [2014-10-23 17:35:56 - myhello]      Unable to add 'F:cocos2d-x-2.2.3cocos2d-x-2.2.3projectsmyhelloproj.androidassetsCloseNormal.png': Zip add failed

    [2014-10-23 17:35:56 - myhello] ERROR: unable to process assets while packaging 'F:cocos2d-x-2.2.3cocos2d-x-2.2.3projectsmyhelloproj.androidin esources.ap_'

    [2014-10-23 17:35:56 - myhello] ERROR: packaging of 'F:cocos2d-x-2.2.3cocos2d-x-2.2.3projectsmyhelloproj.androidin esources.ap_' failed

     

    上面的错误原因是:

    要改动:cygwin64etc中的fstab,将最后一行凝视掉。而换成例如以下的配置:

    none /cygdrive cygdrive binary,noacl,posix=0,user 0 0

    其他问题:略

     

    

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Sprint2-3.0
    6/13 Sprint2 看板和燃尽图
    6/8/9/10/11 Sprint2 看板和燃尽图
    相互观看与评价
    复利计算器结对2.0
    汉堡包1.0
    复利计算5.0 结对
    《构建之法》第四章 二人合作 读后感
    复利计算器单元测试测试报告
    实验一、命令解释程序的编写实验
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4634198.html
Copyright © 2011-2022 走看看