❶ cocos2d-x 3.8 編譯 android 問題,版主能幫忙解決下嗎
這幾天都在苦逼的編譯程序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和cocos2dx可以互調嗎
在cocos2dx里訪問/互調android里的activity方法/變數
不得不感嘆下COCOS2DX的強大。。同一份游戲代碼不加改動的可以放到android和iphone上面。
而最近在往ANDROID上放的時候,需要集成其它非官方運營渠道的API,而對方提供的API是jar包。所以需要在cocos2dx C++源文件中調用java的API,因此有了以下DEMO代碼:
activity里有如下定義:
Java代碼
public void cppCall_nonStatic_logsth(){
//非靜態方法
Log.i("cppCall_nonStatic", "test2~~~~!!!");
}
public static Object cppCall_logsth(){
//靜態方法
Log.i("cppCall", "test~~~~!!!");
return activity;
}
AppDelegate.cpp里:
加上預定義(for android)
C++代碼
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include <JniHelper.h>
#include <android/log.h>
#if 1
#define LOG_TAG "JniHelper"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#else
#define LOGD(...)
#endif
#endif
關鍵代碼片段:
C++代碼
JniMethodInfo minfo;
jobject jobj;
bool b = JniHelper::getStaticMethodInfo(minfo,
"com/loy/puzzles/Puzzles", //類路徑
"cppCall_logsth", //靜態方法名
"()Ljava/lang/Object;"); //括弧里的是參數,後面的是返回值。
if (!b) {
LOGD("JniHelper::getStaticMethodInfo error...");
}else{
jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
}
JniHelper::getMethodInfo(minfo,
"com/loy/puzzles/Puzzles",
"cppCall_nonStatic_logsth",
"()V");
if(!b){
LOGD("JniHelper::getMethodInfo error...");
}else{
LOGD("ready to invoke method...");
minfo.env->CallVoidMethod(jobj, minfo.methodID);
}
最終LOGCAT列印日誌如下:
12-29 12:46:33.891: D/JniHelper(2008): testing~~~
12-29 12:46:33.891: I/cppCall(2008): test~~~~!!!
12-29 12:46:33.891: D/JniHelper(2008): ready to invoke method...
12-29 12:46:33.891: I/cppCall_nonStatic(2008): test2~~~~!!!
12-29 12:46:33.891: D/JniHelper(2008): testing over~~~
即表示調用成功。
❸ 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系統比較蹩腳。
❹ android 怎麼調用cocos2dx的方法
cocos2d-x在win32平台上開發出來的代碼還需要交叉編譯後才能生成android可以使用的包,具體操作見這個文檔 另:使用cocos2d-x引擎的優勢在於便於移植性。其開發出的C++代碼只要在各平台上只要稍加改動就可以使用。
❺ cocos2dx3.2編譯android的.so報錯
NDK_MODULE_PATH沒定義
❻ 新手,cocos2dx移植到android平台不知道怎麼導入sqlite3庫
創建windows平台項目 一、 搭建windows開發環境 官網上顯示cocos2d-x支持win7、winxp、vista系統但我只在win7上用過以下說明均是在win7系統上的編譯器使用vs2010。
1、 安裝vs2010 2、 安裝Visual Assist X可選
3、 執行build-win32.bat編譯cocos2d-x
4、 運行cocos2d-x根目錄下的install-templates-msvc.bat將cocos2d-x模板加入vs模板庫。
5、將.\Debug.win32目錄下的所有dll文件拷貝至Windows\system32\ (iconv.dll libcocos2d.dll libcocosDenshion.dll libcuri.dll libEGL.dll libgles_cm.dll libxml.dll pthreadVCE2.dll zlib1.dll )6、 雙擊cocos2d-win32.vc2010.sln進入vs編譯環境
二、 新建win32項目
1、在「解決方案」上單擊右鍵選擇「添加」-〉「新建項目」。
2、選擇「左側Cocos2d-x模板」在右側列表中選擇「Cocos2d-win32 Application」輸入項目名稱「Cocos2dDemo」點「確定」。
3、在彈出的對話框中點擊「下一步」。
4、如果需要使用Box2D引擎則選中否則不要選。點擊「finish」創建成功。
三、 編譯運行
1、右鍵Cocos2dDemo項目選擇「生成」進行編譯。
2、右鍵Cocos2dDemo項目選擇「設為啟動項目」。然後F5或者點擊菜單欄的運行鍵 運行。
四、 創建新的解決方案 新建項目有兩種方式一是直接在cocos2d-x解決方案中添加新項目上面已經介紹過了。當你剛開始接觸cocos2d-x還在嘗試寫demo時用這種方式可以快捷的創建demo而且方便查看例子中的代碼。
另一種方式是創建一個新的解決方案方法如下
1、「文件」-〉「新建」-〉「項目」
2、進入新建項目的窗口選擇「左側Cocos2d-x模板」在右側列表中選擇「Cocos2d-win32 Application」輸入項目名稱「Cocos2dDemo」點「確定」。然後執行「下一步」。
3、使用Box2D引擎則選中否則不要選。點擊「finish」創建成功。
4、單擊左下角的屬性標簽或者選擇「視圖」-〉「屬性管理器」打開屬性管理器
5、在屬性管理器中雙擊「Microsoft.Cpp.Win32.user」彈出屬性頁在裡面設置VC++目錄即可。這樣該設置對所有VC項目都有效見下圖。
6、在「包含目錄」中, 加入下列項目 (D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\win32)
7、在「庫目錄」中, 加入下列項目(D:\adroid\cocos2d-2.0x-2.0.3\Debug.win32)(發布時用release目錄下的!!)
8、上面的第4、5、6、7條
也可以通過如下方法解決: 定位到%USERPROFILE%\appdata\local\microsoft\msbuild\v4.0可以通過運行或直接在windows資源管理器的地址欄中輸入使用其他文本編輯工具修改Microsoft.Cpp.Win32.user.props或Microsoft.Cpp.X64.user.props文件中的相關欄位。以下是我的文件內容 <IncludePath>D:\android\cocos2d-2.0-x-2.0.3;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\include;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\win32;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\win32\OGLES;D:\android\cocos2d-2.0-x-2.0.3\external\Box2D;D:\android\cocos2d-2.0-x-2.0.3\CocosDenshion\include;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\win32;D:\android\cocos2d-2.0-x-2.0.3\cocos2dx\kazmath\include;$(IncludePath)</IncludePath><LibraryPath>D:\android\cocos2d-2.0-x-2.0.3\Debug.win32;$(LibraryPath)</LibraryPath> 第4至8條的作用是加入解決方案所依賴的頭文件和庫文件以保證項目的正常編譯運行。
五、 如何刪除vs里的cocos2d-x模板
1、 打開如下目錄 (Example as default install) 1VS2008: C:\Program Files\Microsoft Visual Studio 9.0\VC\vcprojects\ 2VC2008Express: C:\Program Files\Microsoft Visual Studio 9.0\VC\Express\VCProjects 3VS2010: C:\Program Files\Microsoft Visual Studio 10.0\VC\vcprojects\ 4VC2010Express: C:\Program Files\Microsoft Visual Studio 10.0\VC\Express\VCProjects
2、 刪除此目錄下的 Cocos2d-x文件夾 3、 刪除前綴為 CCAppWiz (0.8.0 or later) 或 CCXAppWiz (0.7.2 or earlier)的文件
將項目由win32移植到android平台
一、 快速搭建android開發環境
1、將伺服器上的eclipse、java、android sdk、android ndk、cygwin、cocos2d-x文件夾拷貝到本地請注意保存的路徑為英文、不包含空格、且不要過長。
2、 運行eclipse添加android-sdk的路徑。(preferences->Android:SDK Location)
3、 添加ADT(Help->Install New Software:Work with)
4、添加java環境變數。 新建變數JAVA_HOME變數值為java目錄的絕對路徑。 在path中添加 %JAVA_HOME%\D:\android\Java\jdk1.6.0_20\bin; %JAVA_HOME%\D:\android\Java\jdk1.6.0_20\jre\bin; D:\android\Java\jre6\bin;
5、運行一次Cygwin.bat
6、修改\cygwin\home\用戶名\.bash_profile文件添加NDK_ROOT=/cygdrive/d/android/android-ndk-r8b export NDK_ROOT
7、 修改\cocos2d-2.0-x-2.0.3\create-android-project.bat中的如下路徑 set _CYGBIN=e:\cygwin\bin set _ANDROIDTOOLS=e:\android\android-sdk\tools set _NDKROOT=e:\android\android-ndk-r8
二、 新建android項目
1、 運行create-android-project.bat創建新的android項目例如項目名稱為Cocos2dDemo。
2、 將win32下完成的.cpp和.h文件拷貝到\Cocos2dDemo\Classes
3、將win32下使用的資源拷貝到\Cocos2dDemo\proj.android\assets
4、將cpp文件的路徑、使用的頭文件的目錄加入到Android.mk文件。
5、打開Cygwincd 到/Cocos2dDemo/proj.android目錄下
6、執行./build_native.sh進行編譯
7、在eclipse中編譯打包。
三、 補充
1、2.0以上版本的引擎基本無法在android模擬器上運行建議在xcode和vs上調試好直接在真機上運行。
2、2.0以上版本的引擎要求android的開發和運行環境都要2.2以上的sdk。
將項目由win32移植到ios 一、 創建ios項目
1、 安裝XCode
2、執行install-templates-msvc.bat將模板添加到XCode
3、打開xcode選擇Create a new Xcode project選擇cocos2d-x模版
4、點擊next填入項目名稱Man
5、找到Man的主項目在這里新建一個iOS文件夾。點擊create創建完成
6、刪除Resource和Classes下的多餘文件Helloworld的代碼和資源
7、右鍵點擊Resource 選擇Add Files to "Man"... 7、將Man主項目文件夾下的Resource文件夾中的資源添加到當前工程。注意選擇create folder references for any added folders只是添加一個引用
8、同樣的方法添加源文件和頭文件到Classes下
9、點擊Run編譯運行
二、 補充
1、Mac 平台的OS X需要10.6及以上版本
2、IOS平台需要4.0及以上版本
3、IOS真機支持iPad 1、iPad 2、iPad 3、 iPhone 3GS、iPhone 4、iPhone 4S、iPhone 5、iphone6、iPod Touch 3 and iPod Touch 4 不支持iPhone and iPhone 3G。
❼ 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軸的任何位置—-但是你有可能不想呈現出某些點,如你可能不想要屏幕超過地圖的邊緣(那麼它便只會呈現出黑邊!)。
❽ 如何win32上cocos2dx發布安卓apk流程
首先在exclipe上配置好java的jdk1.6或更高,配置好android環境(最好有android2.1或2.2以及更高版本的sdk)。 在下載個ndk,ndk解壓後先放到一邊,cygwin,解壓後,sygwin解壓安裝會比較久大概4-5個小時,如果解壓安裝成功, cygwin安裝過程請參考http //wenku com/view/88b001ef4afe04a1b171de05.html看到第三步就行了,接下來繼續看 安裝好cygwin後驗證下是否成功打入(注意空格)make -v ,gcc -v 沒有出現意外的話就出現以下畫面 表示你已經裝好cygwin了,接下來是修改在安裝cygwin目錄下,如本人安裝目錄如下D:\cygwinx\home\Administrator 然後最好用UE編輯器點開.bash_profile,然後在最下面加上 (ndk路徑以及cocos2dx路徑即/cygdrive/你所在的盤的ndk路徑如下) NDK_ROOT=/cygdrive/e/AndroidNDK/android-ndk-r8e export NDK_ROOT COCOS2DX_ROOT=/cygdrive/d/cocos2d-2.1beta3-x-2.1.1 export COCOS2DX_ROOT 然後就完成了大半了,再在D:\cocos2d-2.1beta3-x-2.1.1下點擊 第一個填寫的是包名稱,一般填寫***.***.***之類, 第二個是填寫工程名,你根據需要定義咯 在最好選項是選擇哪種android的sdk,最好使用經歷低的版本(如2.1或2.2)比較好兼容。 然後生產出來時個簡單的helloworld工程,如果是要將自己的工程裝成android的,及將生成工程文件中的proj.android拷貝到自己的工程文件中,如下圖 然後需要修改三個地方如 1)將proj.win32裡面的.h以及.cpp文件拷貝到Classes中 (如果以後修改那些.cpp文件或.h文件需要繼續從proj.win32拷貝到Classes中覆蓋掉之前的文件再生成新的android工程) 2)進去proj.android\jni下面修改Android.mk, 將所有.cpp的路徑都添加進去即可,如本人增加了下面那些路徑, 3)用UE編輯器修改build_native.sh文件 在第三行下面加入,如下 NDK_ROOT=/cygdrive/E/AndroidNDK/android-ndk-r8e COCOS2DX_ROOT=/cygdrive/D/cocos2d-2.1beta3-x-2.1.1 GAME_ROOT=$COCOS2DX_ROOT/RussiaGame (注意RussiaGame是我cocos2dx的工程名) GAME_ANDROID_ROOT=$GAME_ROOT/proj.android RESOURCE_ROOT=$GAME_ROOT/Resources 好了 修改完這些保證每錯誤之後 打開cygwin,然後經過下面路徑(以本人路徑為參照) 到最後./build_native.sh之後沒錯誤的話(這個過程比較久大概十幾二十分鍾,有些可能要半個鍾頭),它就能生產android項目了(成功的判斷是看他是否生產.so文件) 成功的話在路徑D:\cocos2d-2.1beta3-x-2.1.1\RussiaGame\proj.android\libs\armeabi下能看到libgame.so文件 然後接下來就可以生成可以在exclipe上運行的android工程了,導入D:\cocos2d-2.1beta3-x-2.1.1\RussiaGame\proj.android這個就可以在exclipe上看到該工程了 如果出現 如果一開始這個文件沒有存在的話(我當時是一開始沒有這個文件,當時很悲劇,常看了項目jdk是1.6的沒問題,最後發現就是這個文件缺失造成的) 右鍵點擊你的項目-》選擇導入-》再點擊browse-》(進入到你的項目所在的目錄,進入cocos2dx->platform->android->java)然後就會出現那個文件了 以及有個libcocos2dx項目也有了(這個項目相當於類庫不要刪掉它),以後就不用重復上面這些導入了。 然後沒有報錯就說明成功啦,然後就可以在exclipe上進行真機運行啦(注意好像虛擬機運行一直會出現bug,我也一直沒成功,所以建議真機運行吧,好像現在只能真機運行才行),然後就可以成功運行以及會在bin文件下回生成一個apk文件可以拷貝給大家玩啦,好開心的喔。。。。。 然後到現在這樣就算是轉android成功了, (悄悄說下 ,如果需要把項目在真機上弄成豎屏,及要在AndroidManifest.xml中改一改, android:screenOrientation="landscape"(橫屏),android:screenOrientation="portrait"(豎屏),它默認為橫屏),到現在好開心的,打了這么多,大家一起學習吧加油