[IOS篇]Xcode cannot run using the selected device.錯誤

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1

一、問題

今天在運行Xcode時,遇到了一個Xcode cannot run using the selected device.的錯誤。


二、解決辦法

上網爬文,很多人都說是運行版本的設置不一致而產生該問題(見下圖)

但筆者在實際實作時,
發現是因為擅自更改專案相關目錄名稱造成的問題。

如果以上辦法無法改善,
建議直接將整個專案砍掉重新建置了。

[Android篇]編譯(build_native.sh)C++ Library時出現Box2D.h: No such file or directory

一、問題

在編譯C++ Library時,遇到了Box2D.h: No such file or directory的錯誤。


二、解決辦法

此狀況是因為程式在編譯C++ Library時,找不到Box2D.h此檔案造成的錯誤。
請將Box2D目錄複製到該放置的位置︰

然後,原始碼的地方
改變include Box2D.h的目錄路徑


[Android篇]編譯C++Library-->build_native.sh時出現NDK_MODULE_PATH variable is properly defined

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
文章攢寫時間︰2012/12/29 12:53

一、問題

在android project底下要使用build_native.sh編譯C++ Library時,
遇到了下列錯誤︰

Android NDK:
jni/Android.mk: Cannot find module with tag 'CocosDenshion/android' in import path   
Android NDK:
Are you sure your NDK_MODULE_PATH variable is properly defined ?

二、解決辦法

會出現這個錯誤是因為在編譯C++ Library時,
找不到CocosDenshion/android這個路徑目錄,
將build_native.sh用文字編輯器打開,
並將下列值做更改成相對於你的android專案路徑中,存放CocosDenshion的位置。
如︰
COCOS2DX_ROOT="$DIR/../.."  -->  COCOS2DX_ROOT="$DIR/../../.."

mac設定ndk環境變數

在終端機裡打上
export NDK_ROOT=/Users/你的使用者名稱/Android/adt-bundle-mac/android-ndk-r8c

也可以直接將這行指令放進/Users/你的使用者名稱/.bash_profile裡
請參考在Mac建立Android的環境變數

[cocos2d-x篇]pushScene和replaceScene的差別

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
pushScene是舊的場景依然保留在內存,不釋放,所以沒問題,而replaceScene是要從內存裡釋放上一個場景里內容的,問題就出在當釋放內存時,場景要先刪除所有的child, 而當其中有一些child任然在運行著動作,導致刪除不成功,切換失敗。像你的labelClick就一直在執行動作。可以嘗試一下在切換場景之前運行[labelClick stopAllActions] 來試一下。

[Android篇]在Android看CCLOG

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
在proj.android/jni/Android.mk中
LOCAL_MODULE := game_shared之后增加一行
LOCAL_CFLAGS += -DCOCOS2D_DEBUG=1

[Android篇]從IOS移植到Android的兩三事(更新中)

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
攢寫時間︰2012/12/07 15:30
修改次數︰1
最後修改︰2012/12/07 15:30

當我們將cocos2dx的Code在Android上要做編譯時,
筆者遇到一些無法順利編譯的經驗,
這些經驗都是訣︰

訣1︰
在Android上要編譯c時,遇到下列錯誤︰
a function call cannot appear in a constant-expression

在h標頭檔直接使用API函式,這在xcode裡能編譯,也能順利在IOS上運行,但在Android要build_native.sh時,卻告訴我們它們不接受我們直接在h標頭檔使用API。請在h檔乖乖的宣告,並在cpp檔裡乖乖的實作。

[cocos2d-x篇]Sprite移動

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
本文貼自JaoYE部落格
声明:博文内容为自己整理笔记所用,有不对的地方还请大家指正.
在cocos2dx 中的tests 项目里 已经带了 足够多的 动画事例
ActionsTest
我只是看了其中一些 自我感觉比较常用的动画
ActionMove   移动
在cocos2d-x中移动分  to  和   by   两种
1     CCSize s = CCDirector::sharedDirector()->getWinSize();
2 
3     CCActionInterval*  actionTo = CCMoveTo::create(2, CCPointMake(s.width-40, s.height-40));    //2s的时间移动到某个位置相对于屏幕
4     CCActionInterval*  actionBy = CCMoveBy::create(2, CCPointMake(80,80));                        //2s的时间移动到80,80
5     CCActionInterval*  actionByBack = actionBy->reverse();                                        //让动作回复到actionBy之前的地方
6 
7     m_tamara->runAction( actionTo);                                                                //执行actionTo
8     m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));                    //顺序执行(actionBy,actionByBack),必须用NULL结尾
9     m_kathia->runAction(CCMoveTo::create(1, CCPointMake(40,40)));                                //1s的时间移动到40,40
 ActionScale  缩放
同样分为 to 和 by 记得有地方说这两种缩放  效果会不一样  但是我在win32 上实验   缩放大小是一样的,以后在到xcode 上实验
1     CCActionInterval*  actionTo = CCScaleTo::create(2.0f, 0.5f);                        //2个参数(时间,放大倍数)
2     CCActionInterval*  actionBy = CCScaleBy::create(2.0f, 1.0f, 10.0f);                 //三个参数(时间,x方向放大倍数,y方向放大倍数)
3     CCActionInterval*  actionBy2 = CCScaleBy::create(2.0f, 5.0f, 1.0f);                    
4 
5     m_grossini->runAction( actionTo);                                                
6     m_tamara->runAction( CCSequence::create(actionBy, actionBy->reverse(), NULL));        
7     m_kathia->runAction( CCSequence::create(actionBy2, actionBy2->reverse(), NULL));    
ActionSkew
还没研究 暂时留在这里
 1     CCActionInterval *actionTo = CCSkewTo::create(2, 37.2f, -37.2f);
 2     CCActionInterval *actionToBack = CCSkewTo::create(2, 0, 0);
 3     CCActionInterval *actionBy = CCSkewBy::create(2, 0.0f, -90.0f);
 4     CCActionInterval *actionBy2 = CCSkewBy::create(2, 45.0f, 45.0f);
 5     CCActionInterval *actionByBack = actionBy->reverse();
 6 
 7     m_tamara->runAction(CCSequence::create(actionTo, actionToBack, NULL));
 8     m_grossini->runAction(CCSequence::create(actionBy, actionByBack, NULL));
 9 
10     m_kathia->runAction(CCSequence::create(actionBy2, actionBy2->reverse(), NULL));
ActionRotate
 旋转
 1     CCActionInterval*  actionTo = CCRotateTo::create( 2, 45);                        //2s内顺时针旋转45度(每跨度180,旋转方向会相反)
 2     CCActionInterval*  actionTo2 = CCRotateTo::create( 2, -45);                        //2s内逆时针旋转45度(每跨度180,旋转方向会相反)
 3     CCActionInterval*  actionTo0 = CCRotateTo::create(2 , 0);
 4     m_tamara->runAction( CCSequence::create(actionTo, actionTo0, NULL));
 5 
 6     CCActionInterval*  actionBy = CCRotateBy::create(2 ,  360);                        //2s内自身旋转360度,正数为顺时针旋转,负数相反
 7     CCActionInterval*  actionByBack = actionBy->reverse();                            //回复
 8     m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));        
 9 
10     m_kathia->runAction( CCSequence::create(actionTo2, actionTo0->copy()->autorelease(), NULL));
11     //actionTo0->copy()->autorelease()  不清楚  作用 
ActionJump
跳动移动
1     CCActionInterval*  actionTo = CCJumpTo::create(2, CCPointMake(300,300), 50, 4);        //2s内跳向300,300的位置,跳跃高度为50,跳跃次数为4
2     CCActionInterval*  actionBy = CCJumpBy::create(2, CCPointMake(300,0), 50, 4);        //向x方向跳动300像素,跳跃高度为50,跳跃次数为4
3     CCActionInterval*  actionUp = CCJumpBy::create(2, CCPointMake(0,0), 80, 4);            //原地跳动 高度80 次数为4
4     CCActionInterval*  actionByBack = actionBy->reverse();                                //回复
5 
6     m_tamara->runAction( actionTo);
7     m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));            //顺序执行actionBy, actionByBack动作
8     m_kathia->runAction( CCRepeatForever::create(actionUp));                            //CCRepeatForever  一直重复相同的动作
顺序执行和并发执行
 1     CCMoveTo *moveTo = CCMoveTo::actionWithDuration(5, ccp(150,250));
 2     CCScaleTo *scaleTo = CCScaleTo::actionWithDuration(5, 3);
 3     CCDelayTime *waiting = CCDelayTime::actionWithDuration(2);//停滞2秒
 4     CCRotateBy *rotBy = CCRotateBy::actionWithDuration(5, 180);
 5     //顺序执行定义好的动画
 6     _sprite1->runAction(CCSequence::actions(moveTo,waiting,scaleTo,waiting,rotBy,NULL));
 7     //并发执行(同时执行)各类动画
 8     _sprite2->runAction(CCSpawn::actions(moveTo,scaleTo,rotBy));
 9     //一直重复相同的动作
10     _sprite3->runAction(CCRepeatForever::actionWithAction(rotBy));
_sprite->stopAction(scale);//停住某个action,只能停止单个动画,在组合动画中不能停住

带有回调方法的移动
ActionCallFunc   无参回调
 1 void ActionCallFunc::onEnter()
 2 {
 3     ActionsDemo::onEnter();
 4 
 5     centerSprites(3);
 6 
 7     CCFiniteTimeAction*  action = CCSequence::create(
 8         CCMoveBy::create(2, CCPointMake(200,0)),
 9         CCCallFunc::create(this, callfunc_selector(ActionCallFunc::callback1)), 
10         NULL);
11 
12     CCFiniteTimeAction*  action2 = CCSequence::create(
13         CCScaleBy::create(2 ,  2),
14         CCFadeOut::create(2),
15         CCCallFuncN::create(this, callfuncN_selector(ActionSequence2::callback2)), 
16         NULL);
17 
18     CCFiniteTimeAction*  action3 = CCSequence::create(
19         CCRotateBy::create(3 , 360),
20         CCFadeOut::create(2),
21         CCCallFuncND::create(this, callfuncND_selector(ActionSequence2::callback3), (void*)0xbebabeba), 
22         NULL);
23 
24     m_grossini->runAction(action);
25     m_tamara->runAction(action2);
26     m_kathia->runAction(action3);
27 }
28 
29 
30 void ActionCallFunc::callback1()
31 {
32     CCSize s = CCDirector::sharedDirector()->getWinSize();
33     CCLabelTTF *label = CCLabelTTF::create("callback 1 called", "Marker Felt", 16);
34     label->setPosition(CCPointMake( s.width/4*1,s.height/2));
35 
36     addChild(label);
37 }
38 
39 void ActionCallFunc::callback2(CCNode* pSender)
40 {
41     CCSize s = CCDirector::sharedDirector()->getWinSize();
42     CCLabelTTF *label = CCLabelTTF::create("callback 2 called", "Marker Felt", 16);
43     label->setPosition(CCPointMake( s.width/4*2,s.height/2));
44 
45     addChild(label);
46 }
47 
48 void ActionCallFunc::callback3(CCNode* pTarget, void* data)
49 {
50     CCSize s = CCDirector::sharedDirector()->getWinSize();
51     CCLabelTTF *label = CCLabelTTF::create("callback 3 called", "Marker Felt", 16);
52     label->setPosition(CCPointMake( s.width/4*3,s.height/2));
53     addChild(label);
54 }
55    

有参数的回调
 1 void ActionCallFuncND::onEnter()
 2 {
 3     ActionsDemo::onEnter();
 4 
 5     centerSprites(1);
 6 
 7     CCFiniteTimeAction* action = CCSequence::create(CCMoveBy::create(2.0f, ccp(200,0)),
 8         CCCallFuncND::create(this, callfuncND_selector(ActionCallFuncND::removeFromParentAndCleanup), (void*)true),
 9         NULL);
10 
11     m_grossini->runAction(action);
12 }
13 
14 std::string ActionCallFuncND::title()
15 {
16     return "CallFuncND + auto remove";
17 }
18 
19 std::string ActionCallFuncND::subtitle()
20 {
21     return "CallFuncND + removeFromParentAndCleanup. Grossini dissapears in 2s";
22 }
23 
24 void ActionCallFuncND::removeFromParentAndCleanup(CCNode* pSender, void* data)
25 {
26     bool bCleanUp = (bool)data;
27     m_grossini->removeFromParentAndCleanup(bCleanUp);
28 }
 其他动画可以在tests里自行查找
cocos2d-x提供丰富的动画

[cocos2d-x篇]cocos2dx下Log

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1

如果要取float值,則下以下
CCLog("width %f,height %f",visibleSize.width,visibleSize.height);

[cocos2d-x篇]cocos2dX的3種螢幕尺寸調整 方式

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
cocos2dx在多解析度裡提供3種螢幕尺寸顯示方式︰
  1. pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder);//從中間裁,犠牲餘邊    
  2. pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionShowAll);//上下黑邊,背景全秀
  3. pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionExactFit);//使用變形方式填滿螢幕

[IOS篇]Cocos2dX-IOS 直向開發的設定方式

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
在RootViewController.mm裡,
- (BOOL)shouldAutorotateToInterfaceOrientation:
函式的return值改回傳為return UIInterfaceOrientationIsPortrait( interfaceOrientation );
 
最後的樣子會變成︰
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return UIInterfaceOrientationIsPortrait( interfaceOrientation );
} 

[Android篇]cocos2dx-android專案無法編譯C++

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
一、Problem
我們知道,
如果要在Android使用C Library,
必須先將C編譯過。

今天在使用Cocos2Dx在編譯C時,
在Cygwin的Android專案目錄下達build_natvie.sh時,
出現了
Android NDK: jni/Android.mk: Cannot find module with tag 'CocosDenshion/android' in import path
的錯誤導致無法編譯。

二、Solution
上網查了文章發現Android NDK r7不會有此問題,r8才有。
解決方法如下︰

在你的Android JNI資源目錄底下修改Android.mk檔,
添加下列紅色敘述。
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := game_shared

LOCAL_MODULE_FILENAME := libgame

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/HelloWorldScene.cpp
                  
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes                  

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static
           
include $(BUILD_SHARED_LIBRARY)

$(call import-add-path, /cygdrive/d/Android/cygwin/cocos2d)\
$(call import-add-path, /cygdrive/d/Android/cygwin/cocos2d/cocos2dx/platform/third_party/android/prebuilt)\


$(call import-module,CocosDenshion/android)\
$(call import-module,cocos2dx)\
$(call import-module,extensions)

[IOS篇]【iOS-cocos2d-X 游戏开发之一】在Mac下结合Xcode搭建Cocos2d-X开发环境&卸载Cocos2dx模版

cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
本站文章均为 李华明Himi 原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2dx/599.html

2011-3-6更新:
今天大概说下关于cocos2d与cocos2d x的卸载方面的小提示,至于Cocos2d与Cocos2dX卸载基本网上都有相关文章,但是!今天说的是如何卸载Cocos2d在Xcode的模版;
卸载Cocos2d/X其实就是删除其相关文件即可,这个好说,但是模版这东西有些郁闷,因为其模版是被放置隐藏文件中了,所以我们想要删除必须先让你的mac显示隐藏文件才是关键!
首先打开你mac终端,然后输入如下命令:
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
或者
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles YES
隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles NO
输入后回车即可,然后我们关闭终端。然后点击你mac桌面菜单的“小苹果”图标,选择“强制退出”菜单,然后选择“Finder”,然后点击“重新 启动”,OK。所有隐藏文件可以看到了。那么这里我把删除我电脑Xcode中的Cocos2d/Cocos2dX模版的路径放出:
/Users/Himi/Library/Developer/Xcode/Templates
对应文件夹路径如下:
Macintosh HD->用户->Himi(你的用户名)-> 资源库(隐藏的)->Developer->Xcode->Templates
OK,直接删除Templates(Xcode中的模版)中的cocos2d-x还是cocos2d文件夹即可!
———————————————————————-
从今天开始Himi将陆续更新cocos2d-X的博文,毕竟cocos2d-X的跨平台确实很有诱惑力,尤其是网龙公司的《91部落》手机网游更 让Himi有了深入cocos2dX的价值,另外一方面很多iOS游戏公司都已经转入cocos2dX的队列中了,所以今天Himi先来分享如何在Mac 系统下搭建cocos2d-X引擎吧;
首先到Cocos2d-X下载地址下载最新版,Himi下载的是cocos2d-1.0.1-x-0.9.2.zip此版本对于iOS5做了些兼容正好适合,那么可能随着时间推沿,童鞋们看到此篇的时候可能已经不是1.0.1是最新版了,那么这里Himi给出下载列表地址便于大家选择需要的版本,http://code.google.com/p/cocos2d-x/downloads/list
第一步:下载cocos2d-X的引擎包,上面已经给出地址了;
第二步:下载完成之后Himi将其放置到了“文稿”中;(点击Finder-点击左侧的“文稿”);
第三步:启动终端;(点击Finder-前往-实用工具-终端)
第四步:先利用命令进入当前的 “cd documents” 进入Documents文件夹,继续进入文件夹命令:“cd cocos2d-1.0.1-x-0.9.2”,然后“sudo ./install-templates-xcode.sh”命令开始执行安装命令,这时候会如下提示:
1
2
3
4
5
select the template version to install
3 for xcode3
4 for xcode4
input nothing for all
4
让选择对应你的Xcode的版本,对应选择后输入对应数字,然后回车即可安装完成~(Himi悲催,没看到这个直接回车默认给选择了3- . – 我郁闷,无所谓了呵呵~)
OK,下面新建一个项目,然后Xcode出现如下界面,看左侧一栏,多了一个cocos2d-x,如下图:


然后新建好的cocos2d-X项目如下:


直接运行吧,效果如下:


OK,搭建完成,完美运行的说,嘿嘿嘿,不早了,该准备睡觉了,晚安 各位童鞋~

[cocos2d-x篇]新增一個動畫的Sprite

cocos2dx使用版本︰v2.0.4
cocosBuilder使用版本︰v2.0 alpha 1

CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();

                    cache->addSpriteFramesWithFile("images2.plist");

            CCArray *animFrame = new CCArray(4);

            CCSpriteFrame *frame = cache->spriteFrameByName("girl1.png"); // 加進第1幀

                animFrame->addObject(frame);

                frame = cache->spriteFrameByName("girl2.png"); // 加進第2幀

                animFrame->addObject(frame);

                frame = cache->spriteFrameByName("girl3.png"); // 加進第3幀

                animFrame->addObject(frame);

                frame = cache->spriteFrameByName("girl4.png"); // 加進第4幀

                animFrame->addObject(frame);

                CCAnimation* animation = new CCAnimation();

                animation->initWithSpriteFrames(animFrame,0.1f);

                animation->autorelease();

                ////创建动画 

           CCAnimate *animate = CCAnimate::actionWithAnimation(animation); 

           CCSprite* pSprite1 = CCSprite::createWithSpriteFrameName("girl1.png");

          
           pSprite1->setPosition(ccp(100,300));

           pSprite1->runAction(CCRepeatForever::actionWithAction(animate));

          this->addChild(pSprite1,0);
另一種由影像載入的方式
                CCTexture2D *pTexture=CCTextureCache::sharedTextureCache()->addImage("hero.png");  
    CCSpriteFrame *frame0=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(0,0,32,32));  
    CCSpriteFrame *frame1=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(32,0,32,32));  
    CCSpriteFrame *frame2=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(64,0,32,32));  
    CCSpriteFrame *frame3=CCSpriteFrame::createWithTexture(pTexture,CCRectMake(96,0,32,32));  
    CCArray  *animFrames=CCArray::create();  
    CC_BREAK_IF(!animFrames);  
    animFrames->addObject(frame0);  
    animFrames->addObject(frame1);  
    animFrames->addObject(frame2);  
    animFrames->addObject(frame3);  
      
    CCAnimation *animation=CCAnimation::createWithSpriteFrames(animFrames,0.2f);  
      
    CC_BREAK_IF(!animation);  
      
    CCSprite *heroSprite0=CCSprite::createWithSpriteFrame(frame0);  
    CC_BREAK_IF(!heroSprite0);  
    heroSprite0->setPosition(ccp(100,100));  
    addChild(heroSprite0,1);  
    CCAnimate *animate=CCAnimate::create(animation);  
    heroSprite0->runAction(CCRepeatForever::create(animate));//一直执行下去