1记忆卡片游戏代码
CardItem.h |
#pragmaonce #ifndef__CardItem_H__ #define__CardItem_H__ #include"cocos2d.h" USING_NS_CC; classCardItem { public: staticCardItem boolinit(intidx); CCLabelTTF CCSprite CC_SYNTHESIZE(int,_index,Idx); voidshowWhite(); voidshowText(); }; #endif |
CardItem.cpp |
#include"CardItem.h" CardItem *CardItem::create(intidx) { CardItem if { pRet->autorelease(); } else { deletepRet; pRet } returnpRet; } boolCardItem::init(intidx) { CCSprite::init(); setIdx(idx); setContentSize(CCSizeMake(80,80)); setAnchorPoint(ccp(0,0)); //设置字体 CCString ttf ttf->setPosition(ccp(40, this->addChild(ttf); bg 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 { public: staticCCScene staticLayerGame boolinit(intdegree); voidgetAllPoint(); voidgetAvailablePoint(); voidaddCard(); voidshowCardAllWhite(); CCPointArray CCArray *allCards; vector<int>vec; CC_SYNTHESIZE(int,_degere, CC_SYNTHESIZE(int,_clickStart, virtualboolccTouchBegan(CCTouch }; #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 LayerGame scene->addChild(layer); returnscene; } LayerGame *LayerGame::create(intdegree) { LayerGame if { pRet->autorelease(); } else { deletepRet; pRet } 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 allPoints->retain(); for { for { allPoints->addControlPoint(ccp(80 } } } //获得要作为游戏点的point voidLayerGame::getAvailablePoint() { srand(time(NULL)); while { intidx vector<int>::iteratoritr for { if break; } if { vec.push_back(idx); if break; } } } voidLayerGame::addCard() { allCards allCards->retain(); for { CardItem item->setPosition((CCPoint)allPoints->getControlPointAtIndex(vec[i])); addChild(item); item->showText(); allCards->addObject(item); } } voidLayerGame::showCardAllWhite() { CCObject CCARRAY_FOREACH(allCards,obj) { CardItem spr->showWhite(); } } boolLayerGame::ccTouchBegan(CCTouch { for { //推断是否点中 if containsPoint(pTouch->getLocation())) { showCardAllWhite(); SimpleAudioEngine::sharedEngine()->playEffect("boom.mp3"); if { ((CardItem*)allCards->objectAtIndex(i))->removeFromParentAndCleanup(true); allCards->removeObjectAtIndex(i); if { CCScene CCDirector::sharedDirector()->replaceScene(scene); CCLog("you } } else { CCScene CCDirector::sharedDirector()->replaceScene(scene); CCLog("you } _clickStart++; } } returntrue; } |
LayerOver.h |
#ifndef__LayerOver_H__ #define__LayerOver_H__ #include"cocos2d.h" USING_NS_CC; classLayerOver { public: staticCCScene staticLayerOver *create(boolres); boolinit(boolres); voidmenuCallBack(CCObject }; #endif |
LayerOver.cpp |
#include"LayerOver.h" #include"LayerStart.h" CCScene *LayerOver::scene(boolres) { CCScene LayerOver scene->addChild(layer); returnscene; } LayerOver *LayerOver::create(boolres) { LayerOver if { pRet->autorelease(); } else { deletepRet; pRet } returnpRet; } boolLayerOver::init(boolres) { CCLayer::init(); CCMenu CCMenuItem if { CCMenuItem menu->addChild(winItem); menu->addChild(back); } else { CCMenuItem menu->addChild(failItem); menu->addChild(back); } addChild(menu); menu->alignItemsVerticallyWithPadding(30); returntrue; } voidLayerOver::menuCallBack(CCObject { CCScene CCDirector::sharedDirector()->replaceScene(scene); } |
LayerStart.h |
#ifndef__LayerStart_H__ #define__LayerStart_H__ #include"cocos2d.h" USING_NS_CC; classLayerStart { public: CREATE_FUNC(LayerStart); staticCCScene boolinit(); voideasy(CCObject voidhard(CCObject voidveryHard(CCObject voidquit(CCObject enumDEGREE { EASY }; }; #endif |
LayerStart.cpp |
#include"LayerStart.h" #include"LayerGame.h" CCScene *LayerStart::scene() { CCScene LayerStart scene->addChild(layer); returnscene; } boolLayerStart::init() { CCLayer::init(); CCMenuItem menu_selector(LayerStart::easy)); CCMenuItem menu_selector(LayerStart::hard)); CCMenuItem this,menu_selector(LayerStart::veryHard)); CCMenuItem menu_selector(LayerStart::quit)); CCMenu menu->alignItemsVerticallyWithPadding(30); addChild(menu); returntrue; } voidLayerStart::easy(CCObject { CCScene CCDirector::sharedDirector()->replaceScene(scene); } voidLayerStart::hard(CCObject { CCScene CCDirector::sharedDirector()->replaceScene(scene); } voidLayerStart::veryHard(CCObject { CCScene CCDirector::sharedDirector()->replaceScene(scene); } voidLayerStart::quit(CCObject exit(1); } |
执行结果: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 点击进入Easy后的效果: 失败后的效果: |
2记忆卡片手机移植
环境准备:所需软件: 32位: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 64位 |
软件安装(注意不要有中文文件夹): 1. 安装JDK jdk-7u25-windows-i586.exe 2. 安装安卓SDK watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 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位进行安装。 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 配置cygwin. A改动:cygwin64\etc中的fstab,将最后一行凝视掉,而换成例如以下的配置: none /cygdrive cygdrive binary,noacl,posix=0,user 0 0 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 左面cygwin的执行效果图例如以下: |
6配置环境变量 将Cygwin载入系统路径到Eclipse本地路径中。 解决bash找不到的问题。打开Eclipse->windows-preference看到例如以下配置: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> |
7 改动Android的makefile |
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模拟器进行执行,cocos2dx在Android模拟器上执行由问题)。 右击game项目以Android项目进行run(这里以华为荣耀作为測试机)。 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 执行效果: 从以下game即使移植到华为荣耀手机上的cocos2d-x记忆卡片游戏 打开bin。拷贝bak文件就可以用: |
7 横屏、竖屏设置 android的AndroidManifest.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 |
其他问题:略 |
版权声明:本文博客原创文章。博客,未经同意,不得转载。