1.cocos2dx记忆卡片游戏代码、并将游戏移植到“华为荣耀”手机上、移植中的问题总结

简介:  1记忆卡片游戏代码 CardItem.h #pragmaonce #ifndef__CardItem_H__ #define__CardItem_H__   #include"cocos2d.h" USING_NS_CC;   classCardItem :publicCCSprite {


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:\TransPlant\adt-bundle-windows-x86-20140321\eclipse\eclipse.exe):

效果图如下:

game游戏项目导入,导入录入路径:E:\Installed\cocos2d-x-2.2.3\projects\game\proj.android

点击:File -- >Import

运行结果:

 

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

下载后软件:

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

配置cygwin.

A修改:cygwin64\etc中的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:\Installed\cocos2d-x-2.2.3\cocos2dx\platform\android\java

点击确定。导入后的截图:

 

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.3\cocos2d-x-2.2.3\projects\myhello\proj.android\assets\CloseNormal.png': Zip add failed

[2014-10-23 17:35:56 - myhello] ERROR: unable to process assets while packaging 'F:\cocos2d-x-2.2.3\cocos2d-x-2.2.3\projects\myhello\proj.android\bin\resources.ap_'

[2014-10-23 17:35:56 - myhello] ERROR: packaging of 'F:\cocos2d-x-2.2.3\cocos2d-x-2.2.3\projects\myhello\proj.android\bin\resources.ap_' failed

 

上面的错误原因是:

要修改:cygwin64\etc中的fstab,将最后一行注释掉,而换成如下的配置:

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

其它问题:略

 


目录
相关文章
|
5月前
|
Java
电脑玩诺基亚手机jar游戏java-涂鸦地带举例
电脑玩诺基亚手机jar游戏java-涂鸦地带举例
77 0
|
6月前
|
XML Java Android开发
Android Studio App开发之通知渠道NotificationChannel及给华为、小米手机桌面应用添加消息数量角标实战(包括消息重要级别的设置 附源码)
Android Studio App开发之通知渠道NotificationChannel及给华为、小米手机桌面应用添加消息数量角标实战(包括消息重要级别的设置 附源码)
772 0
网狐荣耀手机端内核源码
网狐荣耀手机端内核源码
333 0
|
存储 数据可视化 测试技术
元宇宙空间游戏软件定制 | NFT游戏手机软件 | Metaverse(元宇宙)系统开发构建源码交付
Metaverse(元宇宙) 已成为一个有前途的舞台,为 Web3 项目团队提供指导用例。它拥有巨大的潜力,可以利用曾经在不同社区中孤立的惊人技术来改变我们在日益数字化的经济中的生活、工作和娱乐方式。
|
供应链 5G vr&ar
华为在高端智能手机市场再次撕开了一道深深的口子
智能手机市场趋于饱和,增长变得越来越难,智能手机厂商从被动卷走向了主动卷。
80 0
|
机器学习/深度学习 人工智能 自然语言处理
华为在手机上,率先实现本地端自然语言搜图功能
华为在手机上,率先实现本地端自然语言搜图功能
200 0
游戏中的字体在手机端不显示粗体,怎么办?
如果你在使用“微信小游戏制作工具”做游戏的话,那么这个问题是你必将遇到的,我明明在游戏中设置了文字为粗体,但是最终在手机上显示的时候,却是正常体,这时候该怎么办?
154 0
【Axure教程】手机自适应教程(积分游戏案例)
【Axure教程】手机自适应教程(积分游戏案例)
【Axure教程】手机自适应教程(积分游戏案例)
|
存储 Android开发 iOS开发
方法:把电脑excel表格通讯录联系人导入华为小米苹果手机
闻道有先后,术业有专攻。在你的领域你是熟悉的,但是如何批量把电脑excel表格通讯录联系人导入华为小米苹果手机方面,金芝号码提取导入助手,是很简单便捷的方式,当然了苹果手机iphone也可以导入,它是网上常见的工具。
601 0
方法:把电脑excel表格通讯录联系人导入华为小米苹果手机
|
监控 前端开发 JavaScript
Flask开发成语接龙游戏,以后闲了手机玩玩自己写的游戏吧!
Flask开发成语接龙游戏,以后闲了手机玩玩自己写的游戏吧!
217 0
下一篇
无影云桌面