當前位置:首頁 » 安卓系統 » android調用cocos2dx

android調用cocos2dx

發布時間: 2023-10-10 12:48:31

『壹』 如何使用友盟 Cocos2d-x 分享組件實現 Android/iOS 分享功能

集成准備:

首先我簡單介紹一下組件壓縮包的組成

Cocos2dx
實現Cocos2d-x中跨平台分享功能,需拷貝到您項目的Classes文件夾中;
Platforms
原生的Android和iOS社會化組件SDK,需要您將庫和資源拷貝到對應平台的項目中;
doc
組件的集成文檔;
Umeng_Cocos2dx_Demo_V1.0
Android部分的demo文件,可以安裝在手機上看一下簡單的分享效果和樣式
Cocos2d-x雖然是一個跨平台的引擎,但是對於Android和IOS平台來說,具體的集成方式還是有一定的區別,這里分別介紹Android和IOS平台集成中不同的地方,然後再集中介紹跨平台通用的部分。
Android平台集成步驟:
步驟一:
下載Cocos2d-x組件(下載地址) 並且將jar包添加到build path 路徑下,將res資源文件夾加入到你工程對應資源文件下。將Platforms/Android/controller目錄下的com文件夾拷貝到您的Cocos2d-x項目Android平台的src目錄下,並且在jni/Android.mk中的LOCAL_SRC_FILES下添加如下配置 (注意格式,否則會編譯出錯) :
../../Classes/Cocos2dx/Android/CCUMSocialController.cpp \
../../Classes/Cocos2dx/ShareButton/UMShareButton.cpp \
../../Classes/Cocos2dx/Common/CCUMSocialSDK.cpp

步驟二:
在Cocos2dxActivity子類的onCreate方法下添加如下代碼,用來完成初始化步驟
// this為Cocos2dxActivity類型, 參數2為描述符,可隨意修改.
CCUMSocialController.initSocialSDK(this, "com.umeng.social.share");

步驟三:
在代碼中覆寫Cocos2dxActivity子類的onActivityResult方法,用來實現回調方法。在onActivityResult添加如下代碼 :
// 授權回調
CCUMSocialController.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
轉載,僅供參考。

『貳』 cocos2d-x 3.8 編譯 android 問題,版主能幫忙解決下嗎

一 無法替換cocos2d-x本身自帶的libxml2
為什麼需要自己編譯libxml2:
由於我以前解析xml使用的是Tree的方式,在Win32以及GMO上能夠正常運行,但是在ndk下編譯的時候遇到問題了,原來cocos2d-x使用的libxml2把Tree的解析方式關閉了。於是乎擺在我面前的是兩條路,第一條是重新編譯一版libxml2,打開Tree的解析方式;第二條是修改以前的代碼,採用SAX的解析方式。由於修改代碼的工作量比較大,所以決定先採用第一個方案。(PS:推薦大家在以後的程序中解析xml使用SAX的方式,省很多內存)
編譯時遇到的問題:
先將libxml2源代碼(從Android 2.2的源代碼中拷貝出來的,稍作修改)拷貝到cocos2d-x根目錄,然後修改yourgame/android/廳猜閉jni/Android.mk, 修改如下
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
libxml2 \ # this is the new add content
cocos2dx \
CocosDenshion/android \
))
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
libxml2 \
cocos2dx \
CocosDenshion/android \ ))
然後將cocos2dx\platform\third_party\android\libraries\libxml2.a刪除,再修改yourgame和cocos2d-x使用的新的libxml2的頭文件目錄,最後編譯。然後果斷的悲劇了,libxml2的代碼不會被編譯,然後在鏈接cocos2d-x so的時候會提示link error (libxml2的介面找不到實現)。
解決辦法:
修改cocos2d-x的Makefile文件,修改如下:
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/platform/third_party/android/libraries) \
-lGLESv1_CM -llog -lz \
-lpng \
-ljpeg \
# -lxml2 #delete the old style of link libxml2
LOCAL_STATIC_LIBRARIES := libxml2 # add to enable auto build of libxml2
yourgame 的makefile 的修改參考cocos2d-x。 哈哈,終於能正常編譯了。
二 編譯命令始終是compile++ thumb 或者 compilethumb
為什麼不要使用thumb:
thumb指令集是為了滿足一些低端的設備而加上的,使用的是16位的指令集,能壓縮扮裂代碼密度,但是指令比普通的32位arm指令弱很多,所以建議關閉掉。
解決辦法:
在每個Android.mk 中每個Mole加上LOCAL_ARM_MODE := arm ,這樣就能看到compile++ arm 和compile arm 了。
三 無法載入資源
問題描述:
在Android 程序編譯完打包之後,安裝上設備,提示"Get data from file **** failed", 但是發現文件路徑是對的,只是中間有"."或者".."。
問題產生的原因:
在請教高人之後知道android程序中使用的資源是打包在壓縮文件裡面的,程序中只能通兆團過在壓縮包的全路徑名去獲取文件,並且不能有相對路徑(如"." , "..")。而且,不能通過fopen去打開,因為文件目錄根本就沒有這個文件。
解決辦法:
1. 將plist文件和png,動畫配置xml和png放在相同的目錄,plist和xml中包含的文件名和plist以及xml在相同的目錄下。
2. 在解析xml的時候不能使用xmlReadFile,而使用如下方式:
const char* xmlConfFullPath = CCFileUtils::fullPathFromRelativePath(yourfilename);
CCFileData data(xmlConfFullPath, "rt");
unsigned long size = data.getSize();
char *pBuffer = (char*) data.getBuffer();
doc = xmlReadMemory(pBuffer, size, NULL, "UTF-8", XML_PARSE_RECOVER);
四 dynamic_cast不能使用
問題描述:
dynamic_cast返回NULL,但是在Win32上是能正常工作的。
原因:
不詳,反正搞不定,試過以下各種辦法,均以失敗告終:
1. 修改Application.mk,添加如下:
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
2. 修改編譯器,使用gcc編譯C+代碼,且在鏈接時將-lsupc+ 換成-lstdc++
最後只能放大招:
將dynamic_cast 改為static_cast, 哎,先將就著用吧。

『叄』 android cocos2d x 怎麼創建地圖

對於這一教程,你需要安裝最新的Cocos2D-X版本(游戲邦註:在寫本篇教程的時候更新到2.1.4)。如果你還未擁有最新版本的Cocos2D-X,先下載它並在終端運行如下命令去安裝模版:


cd ~/Downloads/cocos2d-x-2.1.4 ./install-templates-xcode.sh -f -u 然後使用iOScocos2d-xcocos2dx模版在Xcode創造一個新項目。點擊Next,將項目命名為TileGame,將項目設置為Universal,點擊Next然後點擊Create。


你將在這一項目中使用ARC,所以如果這是你第一次聽到ARC,我會鼓勵你先了解下它。模版並不是默認使用ARC,但幸運的是,我們能夠輕松地進行 修改。前往EditRefactorConvert to Objective-C ARC。往下拉並只選擇文件main.m, AppDelegate.cpp, HelloWorldScene.cpp,然後點擊Check並完成向導的步驟。


select targets(from raywenderlich)


創建並運行,然後確保一切都還正常運行—-你應該能夠看到標準的「你好世界」屏幕。


接下來下載游戲資源的壓縮文件。壓縮文件包含如下內容:


你將面向玩家對象使用的精靈。


一些伴隨著cfxr效用所創造的音效(你將會在教程中用到)。


一些伴隨著Garage Band所創造的背景音樂。


你將用到的一些磚塊設置—-這將伴隨著你將使用的地圖編輯器,但我認為我們能夠更輕松地將其與其它內容包含在一起。


一些額外的「特別」磚塊,將在之後進行詳細解釋。


當你下載了資源後,打開它並將TileGameResources文件夾拖到項目的Resources群組中。在項目菜單里,右擊 Resources群組,並選擇Add Files to 「TileGame」…選擇Resources/TileGameResources文件夾,核實選中了Copy items into destination group』s folder (if needed)以及Create groups for any added folders,然後點擊完成。


如果一切順利的畫,所有的文件都將出現在你的項目中。

tile game(from raywenderlich)


現在我們將開始創造地圖!


創造地圖


Cocos2D-X支持基於開放源Tiled Map Editor去創造地圖並將其以TMX格式進行保存。


下載Tiled Map Editor。在編寫本篇教程的時候,其最新版本是0.9.0。


然後運行Tiled,前往FileNew,並如下填寫對話內容:

new tileset(from raywenderlich)

為了獲得圖像,點擊Browse並導航至你自己的TileGame/Resources/TileGameResources文件夾,然後選擇你之前從資源壓縮中下載的tmw_desert_spacing.png文件,並將其添加到項目中。它將自動根據文件名填寫名字。

你可以將寬度和高度設置為32×32,因為這也是磚塊的大小。對於邊緣和間隔:

邊緣是關於在Tiled開始尋找真正的磚塊像素前應該為當前的磚塊略過多少多少像素(包括寬度和高度)。

間隔是關於Tiled在明確了實際磚塊像素並轉向下一個磚塊數據之後應該前進多少像素(包括寬度和高度)。

如果你著眼於tmw_desert_spacing.png,你將發現每個磚塊都圍繞著一個1像素的黑色邊緣,這也解釋了邊緣和間隔為1的設置。

tile(from raywenderlich)

當你點擊OK時,你將看到磚塊呈現在Tilesets窗口中。現在你可以開始繪制了。點擊工具欄的Stamp
Brush圖標,然後點擊地圖上的任何一個位置去放置一個磚塊。

tileset(from raywenderlich)

所以繼續繪制地圖—-盡可能發揮創造性!確保添加至少一些建築到地圖上,因為你在之後將需要一些碰撞內容。

tileset(from raywenderlich)

為了更輕松地繪制內容,你可以著眼於一些快捷方法。以下是最常用到的一些方法:

你可以在Tileset選擇器中圍繞著一系列磚塊拖曳一個盒子,並同時放下多個相鄰的磚塊。

你可以通過Viewoom In和Viewoom Out進行放大和縮小。

z鍵將在基於Stamp Brush工具編輯地圖時進行旋轉。

在一些新功能中你可能會注意到Mini-map。這是一個很棒的功能,它讓你能夠看到一個迷你地圖!著眼於我在Mini-map最下方的迷宮中的糟糕嘗試。紅色盒子代表你在主要編輯窗口中看到的區域。

tileset(from raywenderlich)

當你在閱讀下一個區域中的滾動時牢牢記住這一Mini-map視圖。

需要注意的是這一教程的資源是出現在地圖前的——所以如果你很懶的話便可以直接利用它。如果你這么做,你應該在Tiled打開地圖並明確它是如何設置的。

當你完成地圖的繪制時,在Layers視圖中雙擊Tile
Layer,將名字改為Background。然後點擊FileSave,並將文件保存到TileGame項目中的TileGame
ResourcesTileGameResources,將文件命名為TileMap.tmx,並覆蓋現有的文件。

你將在之後使用Tiled做其它事,但是現在讓我們將這一地圖帶進游戲中!

添加Tiled地圖到Cocos2D-X場景中

打開HelloWorldScene.h,在#include 「cocos2d.h」之後添加如下內容:

usingnamespacecocos2d;

這能指導編輯器去使用cocos2d命名空間,所以你不需要為所有內容加上cocos2d的前綴。

然後添加以下內容到類定義中,即在花括弧之後:

private:CCTMXTiledMap*_tileMap;CCTMXLayer*_background;

這創造了一個實例變數去追蹤磚塊地圖本身,並創造了另一個實例變數去追蹤地圖的背景層。你將在之後學到更多有關磚塊地圖層面的內容。

接下來,用如下內容換掉HelloWorldScene.cpp:

CCTMXObjectGroup*objectGroup=_tileMap->objectGroupNamed(「Objects」);if(objectGroup==NULL){CCLog(「」);returnfalse;}CCDictionary*spawnPoint=objectGroup->objectNamed(「SpawnPoint」);intx=((CCString)*spawnPoint->valueForKey(「x」)).intValue();inty=((CCString)*spawnPoint->valueForKey(「y」)).intValue();_player=newCCSprite();_player->initWithFile(「Player.png」);_player->setPosition(ccp(x,y));this->addChild(_player);this->setViewPointCenter(_player->getPosition());

最後一行有個預兆——但不要擔心,你很快就能到達那裡。

讓我們暫停一會並解釋對象層面和對象群組。首先注意你是通過在CCTMXTiledMap對象中(而不是layerNamed)通過objectGroupNamed方法檢索對象層面。它返回了一個特殊的CCTMXObjectGroup對象。

然後objectGroup調用了objectNamed方法去獲得一個CCDictionary,並包含了一些有關對象的有用信息,如x和y軸,寬度和高度。在教程的這一部分,你需要關心的便是x和y軸,將其設置為玩家精靈的位置。

在代碼塊的最後你設置了視圖去明確玩家的位置。所以現在添加如下內容到HelloWorldScene.h中:

//(CCPointposition);

並添加一個新方法到HelloWorldScene.cpp(在文件的最下方最好):

voidHelloWorld::setViewPointCenter(CCPointposition){CCSizewinSize=CCDirector::sharedDirector()->getWinSize();intx=MAX(position.x,winSize.width/2);inty=MAX(position.y,winSize.height/2);x=MIN(x,(_tileMap->getMapSize().width*this->_tileMap->getTileSize().width)–winSize.width/2);y=MIN(y,(_tileMap->getMapSize().height*_tileMap->getTileSize().height)–winSize.height/2);CCPointactualPosition=ccp(x,y);CCPointcenterOfView=ccp(winSize.width/2,winSize.height/2);CCPointviewPoint=ccpSub(centerOfView,actualPosition);this->setPosition(viewPoint);}

這是關於磚塊的解釋。想像這一函數設置了攝像機的中心位置。它讓用戶能夠進入地圖中x,y軸的任何位置—-但是你有可能不想呈現出某些點,如你可能不想要屏幕超過地圖的邊緣(那麼它便只會呈現出黑邊!)。

『肆』 cocos2dx移植Android平台

如果你用的是windows系統作為開發環境,使用的是cocos2d-x3.2最新版的,你在一開始安裝cocos2d-x的時候,會要求輸入
NDK_ROOT
ANDROID_SDK_ROOT
ANT_ROOT
最新版的cocos2d-x使用了python來進行安裝和編譯程序的,所以你要先在你的windows系統上安裝上python.安裝好之後,下載最新版的cocos2d-x,然後,cd到這個目錄下,你會看到一個有一個setup.py的文件,.py後綴的文件就是python的腳本文件了。是要用python來運行的。如果你安裝好python之後設置好了python的環境變數,這個時候,你只要在命令行里運行:
python setup.py就可以了。
然後你就可以看到要求你輸入的這三個路徑了。
這三個工具的所在路徑,這幾個路徑輸入對了之後,你的cocos2d-x就安裝好了,這個時候,在cmd里創建一個新項目,創建的方法是在命令行里輸入:
cocos new youprojectname -p com.youcom,youprojectname -l cpp -d 你的新建項目所在路徑
然後回車,你就可以看你的的項目會在你的新建項目路徑下有一個youprojectname的文件夾,打開,你就可以看到里邊有各個系統的project文件夾了,還有一個Class和Resources的文件夾。這個時候,你在命令行里cd到你的proj.android文件夾下,使用命令:
python bulid_native.py
就可以對你的安卓新建的helloworld項目進行編譯了。不出意外,要不然一分鍾就編譯好了。會生成一個libcocos2dcpp.so在你的pro.android/libs/armabi的路徑下。然後打開你的ADT,也就是eclipse,進入pro.android目錄,導入android項目到eclipse。這個時候可能會報一個cocos2d-x的lib庫錯誤,只要把cocos2d-x的
cocos2d/cocos/platform/android/java/src
目錄下的文件夾復制到pro.android/src下就可以解決這個問題了。
然後,接上你的android手機,並且在手機中打開開發者模式。點擊程序遠行設置,選擇使用設備運行。在彈出的一個選擇手機設備的框時選擇run,不一會,你的helloworld項目就可以在手機上看到了。
如果要調試,你可以在eclipse中打開logcat,看到cocos2d-x的log輸出信息。
總的來說,android最好的開發環境還是mac系統。因為在mac系統下很多linux命令都可以使用。不像windows系統比較蹩腳。

熱點內容
cvr網路存儲 發布:2025-01-24 17:24:52 瀏覽:415
腿套壓縮襪 發布:2025-01-24 17:05:16 瀏覽:458
電腦如何將安卓軟體卸載干凈 發布:2025-01-24 17:03:06 瀏覽:489
hello密碼怎麼破解 發布:2025-01-24 17:03:06 瀏覽:73
pspfifa無緩存 發布:2025-01-24 16:45:13 瀏覽:165
androidhandler機制 發布:2025-01-24 16:41:10 瀏覽:936
安卓系統如何下載aov 發布:2025-01-24 16:29:53 瀏覽:573
iptables允許ip訪問 發布:2025-01-24 16:19:58 瀏覽:932
安卓80如何識別存儲卡許可權 發布:2025-01-24 16:19:54 瀏覽:232
存儲介質價格 發布:2025-01-24 16:19:18 瀏覽:151