『壹』 cocos2dx3.10 怎麼運行cocos2dx庫
一、通用准備工作
1、安裝Cocos2d-x 3.1
在Cocos2d官網上下載 Cocos2d-x 3.2+引擎 ,下載後解壓縮。
2、安裝Eclipse與Android SDK
這個在Mac上或是PC上開發都是可以通用的。
Eclipse 在其官網下載( 官網地址 )。
Android SDK 在Android開發者中心下載( 地址 )。
Eclipse是開發Android需要用到的IDE。這是個很牛的IDE,有許多插件讓他變得三頭六臂。要開發Android的程序,需要下載相關的插件,但如果每個插件要自己配置,會是很蛋痛的事情。
如果是新手,推薦使用:ADT Bundle。這是Eclipse+Android SDK的合體,所有的項目都已經幫你配置好了。
3、安裝JDK
Eclipse需要java環境才能運行。如果事先沒有安裝Java環境,則會報錯。
解決方案安裝jdk( 下載地址 )。
一般來說安裝之後會自動配置好環境變數。如果還沒有解決問題,請查找網路上關於JDK安裝的攻略,很多的。
4、安裝CDT插件 ( 下載地址 )
這是個Eclipse的插件,用來支持Eclipse中C/C++語言的開發。
從Eclipse的官網下載,下載之後,將features和plusins這兩個文件夾裡面的內容復制到Ecplise安裝目錄下對應的文件夾之後就可以了。
5、安裝NDK ( 下載地址 )
這是進行C/C++與Java混合編譯的必要工具。記下下載之後解壓到的目錄,因為到之後的安裝中會用到。
6、安裝ANT ( 下載地址 )
Cocos的Android開發需要用到它,所以下載下來安裝好吧。
二、PC環境下配置過程
1、安裝VS2012 ( 官方地址 )
網上還有很多其他下載地址。
最好是2012,我曾經試過2010,2013,都會出這樣那樣的問題。所以,2012!
2、安裝python 2.7.6 ( 下載地址 )
因為Cocos2d-x的安裝程序是用phthon寫的,所以需要這個軟體。不要下載python3.0以上的版本,否則運行會出錯。如果是Mac,那麼天生就自帶了。
3、進行開發環境配置
以上的工作完成之後,就可以進行配置了。啟動Windows的命令行(CMD)工具。進入Cocos2d-x 3.1的安裝目錄,執行:
python setup.py
Cocos2d-x 3.1版本使用這個setup.py來安裝,十分方便。執行之後會讓你配置上面准備工作中所安裝的:ANT、NDK、SDK等目錄,把安裝到哪兒去了填寫進入就行。
4、建立自己的項目
用setup.py配置好Cocos2d-x的環境之後,你的命令行中就會多如「cocos」的命令,新建項目將使用這個命令進行。示例:
cocos new hello(項目名稱)-p com.hello(包名字)-l cpp(項目類型) -d E:\MyCocos\cocos2d(目錄)
新建的項目會把所有的源文件和庫都拷到你的項目目錄中。所以新建的項目文件會很大,有許多人懷疑這個的必要性,不過到你之後的開發中就會知道這種配置方法是對的了。
項目建立好之後,就可以開發了:
A、進行VS2012的開發。
找到你的項目目錄下的:proj.win32,打開裡面的解決方案就行。剩下的就是你的任務了。一般來說,直接就可以運行。
B、進行Android的開發。
使用Eclipse中的項目導入,導入proj.android中的項目方案。導入之後,因為SDK的問題,一般無法啟動,關於這個問題,以及其它的問題,請參見(四、其它問題解決方案)。
三、MAC環境下配置過程
1、注冊蘋果開發者賬號 ( 注冊地址 )
如果不使用真機,使用模擬器調試,那麼有開發者賬號應該就足夠了。
如果要使用真機調試,需要購買IOS開發者會員,688RMB一年。我看到之前的攻略說要99美元,但是看現在的頁面的的提示,應該只要有網銀就可以支付了。網上的攻略寫得非常復雜,說要下載證書什麼什麼的,現在統統都不需要了,XCode全部為您代勞了,只要照提示一路點同意就行。
2、安裝XCode
在你的開發者首頁下面就有XCode的下載。通過App Store下載安裝即可。
請使用最新的XCode(需要OS X 10.8以上系統支持),並使用App Store安裝。我的MacBook Air從朋友那裡拿來時還是10.7,因為下載總是中斷,屢次不成功,所以用XCode 4.6,但好像不通過App Store安裝會出這樣那樣的問題。所以強烈推薦使用最新的版本。
3、進行開發者環境配置。
與PC的配置一樣,打開MAC的終端程序,執行setup.py,配置好各種SDK的路徑就行。但MAC需要再加上一句:
source /Users/yourname/.bash_profile
這是用來刷新配置文件的。
4、建立項目文件
使用命令行建立。
如果你像我一樣用兩個平台(PC與MAC)開發,可以共享同一個項目目錄。我的項目文件是放在PC上的,MAC通過共享訪問項目文件。
項目建立好之後就可以開發了。MAC下的配置相對簡單,使用XCode打開項目目錄下的proj.ios_mac下的項目配置文件就行。之後基本不會出錯的。
四、其它問題解決方案
Eclipse與Android相關:
問題 :SDK錯誤
因為Cocos2d-x的模版默認是使用Android 2.3.3(API-10),如果新安裝的ADT Bundle或Android SDK,是API-19,則會出現錯誤,解決方案是通過Android SDK中的管理工具(SDK Manager)下載Android 2.3.3的SDK。
問題 :Project 'XXX' is missing required source folder: 'gen'
這個問題就是上面的SDK錯誤導致的。
問題 :undefined reference to 'cocos2d::network::HttpClient::getInstance()'
我是使用網路庫(network)的時候出現這個錯誤的。如果你使用其它庫,解決方案是一樣的。原因是缺少庫的引用。解決方案是在Android.mk裡面增加:
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
Cocos2d-x的開發者已經在Android.mk裡面加上了很多這種路徑,平時是注釋掉的。您要使用時把這些增加上去就行。
問題 :fatal error: cocos-ext.h: No such file or directory
問題分析:缺少頭文件路徑的引用
需要在:Android.mk裡面增加
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../cocos2d/extensions
Cocos2d-x的開發者已經在Android.mk裡面加上了很多這種路徑,平時是注釋掉的。您要使用時把這些增加上去就行。
問題 :The import org.cocos2dx.lib cannot be resolved。
無法找到指定的庫文件。解決的方案是增加路徑的引用:Project Properties -> Java Build Path -> Source and then linking 「項目目錄/cocos/platform/android/java/src」
VS2012相關:
問題 :「extensions/ExtensionMacros.h」: No such file or directory
無法打開包括文件。
1、解決方案中,添加「現有項目」--> libExtensions 具體目錄: ..\cocos2d\extensions\proj.win32\libExtensions.vcxproj
2、項目中添加引用-->libExtensions
3、通過:屬性->C/C++->附加包含目錄。附加包含目錄:$(EngineRoot)
如果你使用其它的文件,解決方案是一樣的。1、增加項目的引用。2、附加頭文件的包含目錄。
當遇到COCOS2DX 3.2+版本創建許可權問題時:
首先,打開終端cd到目錄 /cocos2d-x-3.2/tools/cocos2d-console/bin 下, 運行 cocos.py 腳本創建文件。
[javascript] view plain
./cocos.py new HelloWorldDemo -p com.coco2dx.org -l cpp -d ~/Desktop
參數說明:
HelloWorldDemo為項目名稱
-p 後面接包名
-l 後面接開發語言類型,有cpp, lua, js三種類型
-d 後面接項目存放的目錄
如果出現 -bash: ./cocos.py: Permission denied ,是因為沒有許可權。 用命令 chmod 修改一下目錄下的 cocos.py 許可權就可以了
[cpp] view plain
chmod u+x cocos.py
『貳』 cocos2d-x jni 問題求助
你試試看
#include <platform/android/jni/JniHelper.h>
cocos2d::JniMethodInfo minfo;
jobject jobj;
if (!cocos2d::JniHelper::getStaticMethodInfo(minfo, "org/cocos2dx/cpp/AppActivity", "getInstance", "()Ljava/lang/Object;"))
return;
jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
if (!cocos2d::JniHelper::getMethodInfo(minfo, "org/cocos2dx/cpp/AppActivity", "你java中AppActivity的成員函數", "(I)V"))
return;
minfo.env->CallVoidMethod(jobj, minfo.methodID, 函數參數);
『叄』 cocos2dx-3.7版本lua程序入口在哪
一、主要分為兩個大步驟,Lua工程的修改,android工程的修改
二、工程環境
開發工具:Cocos-Code-IDE
Lua版本 : Lua 5.1
java版本:1.7
NDK版本:android-ndk-r10c
ANT版本:apache-ant-1.9.4
Framwork:cocos-2dx-3.4
python : 2.7.3
三、Lua工程中的修改
1.在Cocos-Code-IDE中新建Lua工程
可以在這個工程目錄中找到Luaj:
2.新建一個lua類,寫上調用android的方法。
我在src/app/models/下面新建了一個Lua文件,命名為:luajTest.lua
其中代碼如下:
local luaj = require "cocos.cocos2d.luaj" --引入luaj
local luajTest = class("luajTest") -- 構建lua 類
function luajTest:callandroid() --調用android的方法實現
--包名/類名 這個可以在對應的android工程的manifest中得到
local className="org/cocos2dx/lua/AppActivity"
local args = { "hello android", callbackLua }
local sigs = "(Ljava/lang/String;I)V" --傳入string參數,無返回值
--luaj 調用 Java 方法時,可能會出現各種錯誤,因此 luaj 提供了一種機制讓 Lua 調用代碼可以確定 Java 方法是否成功調用。
--luaj.callStaticMethod() 會返回兩個值
--當成功時,第一個值為 true,第二個值是 Java 方法的返回值(如果有)
--當失敗時,第一個值為 false,第二個值是錯誤代碼
local ok,ret = luaj.callStaticMethod(className,"test",args,sigs)
if not ok then
item:setString(ok.."error:"..ret)
end
end
return
3.在入口場景中調用android方法。
我修改了src/app/views/MainScene.lua的場景跳轉方法,如下:
local MainScene = class("MainScene", cc.load("mvc").ViewBase)
local testluaj = require('src.app.models.luajTest')--引入luajTest類
function MainScene:onCreate()
-- add background image
display.newSprite("MainSceneBg.jpg")
:move(display.center)
:addTo(self)
-- add play button
local playButton = cc.MenuItemImage:create("PlayButton.png", "PlayButton.png")
:onClicked(function()
self:getApp():enterScene("PlayScene") --跳轉了一個場景
--在這里嘗試調用android static代碼
local testluajobj = testluaj.new(self)
testluajobj.callandroid(self);
end)
cc.Menu:create(playButton)
:move(display.cx, display.cy - 200)
:addTo(self)
end
return
4.以上為Lua工程中的修改。
四、android工程的修改
1.找到相對應的android工程的。
Lua工程通過Runtime構建的android工程在Lua工程\framewokes\runtime-src\proj.android中。
2.根據luajTest.lua類中定義的包名類名,找到AppActivity.java
3.打開AppActivity.java,在空白處加上uajTest.lua類中定義要調用的方法test.
public static void test(final String param,final int luaFunc) {
System.out.println("----傳過來的參數----param:"+param);
System.out.println("-------luaFunc:"+luaFunc);
/**
* 給lua返回一個字元串
*/
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunc, "success");
/**
* 移除luaId
*/
Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFunc);
}
1234567891011121314
記得在文件上面引入Cocos2dxLuaJavaBridge類。
import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;1
4.到此,修改完成。構建apk,安裝到手機中,看Log.
如果看到以下Log,證明你的Luaj成功調用了java代碼了。
『肆』 java 在cocos2dx中需怎麼引入
要完成在cocos2dx的場景上一個點擊事件,傳遞一個消息到java層,下面讓我們看看如何完成它。
包括
你需要在你的項目中添加以下引用,原作者已經建立了一個在線項目。請確保在你的項目中包含文件了c++和Java,這里有個鏈接你可以查看一下:EasyNDK
C++ 層面:
[cpp] view plain
#include "NDKHelper.h"
// 在cocos2dx中的按鈕點擊方法
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
//注冊一個selector,那麼當我們的native環境(java環境)調用這個字元串名字的函數(此處為名字為SampleSelector的函 數)的時候,這個selector可以響應請求
//注意:設置組名是為了在析構函數中能夠清除掉selector
NDKHelper::AddSelector("HelloWorldSelectors",
"SampleSelector",
callfuncND_selector(HelloWorld::SampleSelector),
this);
// 為這個將要傳遞到native(也就是Java)語言中的消息設置參數
// 在c++中發送要調用的函數名
CCDictionary* prms = CCDictionary::create();
prms->setObject(CCString::create("SampleSelector"), "to_be_called");
// 最後在當前環境(c++)中調用native方法
SendMessageWithParams(string("SampleSelector"), prms);
}
// 一個回調選擇器,native語言(java)將會調用它
void HelloWorld::SampleSelector(CCNode *sender, void *data)
{
CCLog("Called from native environment");
}
// 析構函數移除掉HelloWorldSelectors中的選擇器(selectors)
HelloWorld::~HelloWorld()
{
// 移除相關聯的選擇器,因為我們將要銷毀當前實例
NDKHelper::RemoveSelectorsInGroup("HelloWorldSelectors");
}
Java層面代碼:
[cpp] view plain
/** 當activity第一次被創建調用*/
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// 在主activity中,設置這個activity作為c++消息的接受者
AndroidNDKHelper.SetNDKReciever(this);
}
//實現這個被c++發送消息調用的方法
//確保這個方法的名字跟c++傳遞過來的字元串相同
// 比如我們從c++中傳遞"SampleSelector"字元串,這就是為什麼我們創建這個方法的原因了
public void SampleSelector(JSONObject prms)
{
Log.v("SampleSelector", "傳過來的參數是 : " + prms.toString());
String CPPFunctionToBeCalled = null;
try
{
CPPFunctionToBeCalled = prms.getString("to_be_called");
}
catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("這是一個android層中的popup").
setTitle("Hello World!").
setNeutralButton("OK", null).show();
// 發送帶參數的消息,僅僅當selector列表中有這個相同名字的函數,c++才會接受這些消息,
AndroidNDKHelper.SendMessageWithParameters(CPPFunctionToBeCalled, null);
}
為了跟其他JavaSDK相連接,比如微博SDK,FaceBook SDK等,你可以按照這些sdk的java指導說明,實現這些消息,並傳遞介面到cocos2dx層面調用,使之成為你自己的SDK。在cocos2dx中。我已經通過這種方法實現了APPCircle,Flurry和很多其他的SDK。
『伍』 如何將cocos2dx移植到eclipse上
1.准備三個工具:並解壓放置在Documents目錄下
a.Android開發環境包ADT 已經集成在Eclipse中,我的是adt-bundle-mac-x86_64-20130917mac下默認已經安裝了JDK
b.Android NDK 即Android環境本地編譯C++的包,用r8的,r9的貌似有問題 去網路空間下android-ndk-r8
c.cocos2d-x 開發包, 我的是cocos2d-x-2.1.4
2.添加全局變數vi ~/.bash_profile其中添加如下:路徑不要有空格
export NDK_ROOT_LOCAL=/Users/user/Documents/android-ndk-r8
export NDK_ROOT=$NDK_ROOT_LOCAL
export ANDROID_NDK_ROOT=$NDK_ROOT
export ANDROID_SDK_ROOT=/Users/user/Documents/adt-bundle-mac-x86_64-20130917/sdk
export ANDROID_SDK_ROOT_LOCAL=$ANDROID_SDK_ROOT
export COCOS2DX_ROOT=/Users/user/Documents/cocos2d-x-2.1.4
export PATH=$ANDROID_NDK_ROOT:$PATH
export PATH=$ANDROID_SDK_ROOT:$PATH
export PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH
這樣以後就不需要在create-android-project.shbuild_native.sh這兩個腳本中再重新修改添加響應的路徑了
3.直接cd 到cocos2d-x-2.1.4目錄下並執行「./create-android-project.sh」根據提示輸入相應的包名,項目名和版本號。
生成的項目會在cocos2d-x-2.1.4目錄下(這里假設項目名為PPP),然後cd到 PPP/proj.android下,執行「./build_native.sh」 如此編譯生成C++的相關靜態庫,有時某些頭文件需要include 如:/Users/user/Documents/cocos2d-x-2.1.4/cocos2dx/platform/android/CCFileUtilsAndroid.h
4.打開Eclipse 導入剛剛生成的項目PPP,並修改AndroidManifest.xml中得icon名稱,另外還需在Eclipse里導入cocos2d-x的兩個工程庫最終如下:
libcocos2dx 位於/User/users/Documents/cocos2d-x-2.1.4/cocos2dx/platform/android/java
libPluginProtocol 位於/User/users/Documents/cocos2d-x-2.1.4/plugin/protocols/proj.android
『陸』 如何在android平台上使用js直接調用Java方法
在Cocos2d-js 3.0beta中加入了一個新特性,在Android平台上我們可以通過反射直接在js中調用java的靜態方法。它的使用方法很簡單:
var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)
在callStaticMethod方法中,我們通過傳入Java的類名,方法名,方法簽名,參數就可以直接調用Java的靜態方法,並且可以獲得Java方法的返回值。下面介紹的類名和方法簽名可能會有一點奇怪,但是Java的規范就是如此的。
類名
參數中的類名必須是包含Java包路徑的完整類名,例如我們在org.cocos2dx.javascript這個包下面寫了一個Test類:
package org.cocos2dx.javascript;
public class Test {
public static void hello(String msg){
System.out.println(msg);
}
public static int sum(int a, int b){
return a + b;
}
public static int sum(int a){
return a + 2;
}
}
那麼這個Test類的完整類名應該是org/cocos2dx/javascript/Test,注意這里必須是斜線/,而不是在Java代碼中我們習慣的點。
方法名
方法名很簡單,就是方法本來的名字,例如sum方法的名字就是sum。
方法簽名
方法簽名稍微有一點復雜,最簡單的方法簽名是()V,它表示一個沒有參數沒有返回值的方法。其他一些例子:
(I)V表示參數為一個int,沒有返回值的方法;
(I)I表示參數為一個int,返回值為int的方法;
(IF)Z表示參數為一個int和一個float,返回值為boolean的方法;
現在有一些理解了吧,括弧內的符號表示參數類型,括弧後面的符號表示返回值類型。因為Java是允許函數重載的,可以有多個方法名相同但是參數返回值不同的方法,方法簽名正是用來幫助區分這些相同名字的方法的。
目前Cocos2d-js中支持的Java類型簽名有下面4種:
參數可以是0個或任意多個,直接使用js中的number,bool和string就可以。
使用示例
我們將會調用上面的Test類中的靜態方法:
//調用hello方法
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "hello", "(Ljava/lang/String)V", "this is a message from js");
//調用第一個sum方法
var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(II)I", 3, 7);
cc.log(result); //10
//調用第二個sum方法
var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(I)I", 3);
cc.log(result); //5
在你的控制台會有正確的輸出的,這很簡單吧。
注意
另外有一點需要注意的就是,在android應用中,cocos的渲染和js的邏輯是在gl線程中進行的,而android本身的UI更新是在app的ui線程進行的,所以如果我們在js中調用的Java方法有任何刷新UI的操作,都需要在ui線程進行。
例如,在下面的例子中我們會調用一個Java方法,它彈出一個android的Alert對話框。
//給我們熟悉的AppActivity類稍微加點東西
public class AppActivity extends Cocos2dxActivity {
private static AppActivity app = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = this;
}
public static void showAlertDialog(final String title,final String message) {
//這里一定要使用runOnUiThread
app.runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog alertDialog = new AlertDialog.Builder(app).create();
alertDialog.setTitle(title);
alertDialog.setMessage(message);
alertDialog.setIcon(R.drawable.icon);
alertDialog.show();
}
});
}
}
然後我們在js中調用
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showAlertDialog", "(Ljava/lang/String;Ljava/lang/String;)V", "title", "hahahahha");
這樣調用你就可以看到一個android原生的Alert對話框了。
再加點料
現在我們可以從js調用Java了,那麼能不能反過來?當然可以! 在你的項目中包含Cocos2dxJavascriptJavaBridge,這個類有一個evalString方法可以執行js代碼,它位於frameworks\js-bindings\bindings\manual\platform\android\java\src\org\cocos2dx\lib文件夾下。我們將會給剛才的Alert對話框增加一個按鈕,並在它的響應中執行js。和上面的情況相反,這次執行js代碼必須在gl線程中進行。
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//一定要在GL線程中執行
app.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString("cc.log(\"Javascript Java bridge!\")");
}
});
}
});
這樣在點擊OK按鈕後,你應該可以在控制台看到正確的輸出。evalString可以執行任何js代碼,並且它可以訪問到你在js代碼中的對象。
『柒』 新手,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。
『捌』 cocos2dx移植到Eclipse 引用第三方jar包的問題
右擊「項目」→選擇Properties,在彈出的對話框左側列表中選擇Java Build Path,彈出如上圖所示的對話框,這里選擇"Add Library",彈出如下圖所示對話框,選擇"User Library",然後選擇→Next
『玖』 如何在eclipse下調試cocos2dx
cocos2dx程序移植到eclipse
必要組件:
1.macos gcc編譯器,若沒有,在xcode->preference->downloads中下載command line tools(在命令行下輸入g++,若顯示command not found 則沒有)
2. android sdk :本機目錄為 /Users/zhangyao/IDE/android-sdk-macosx
3.cocos2d-x:本機目錄為 /Users/zhangyao/Desktop/cocos2d-x-2.1.1
4.ndk 本機目錄為 /Users/zhangyao/Desktop/android-ndk-re8
地址:http://developer.android.com/tools/sdk/ndk/index.html
選擇macos 64bit
5.cdt 若沒有 則在help->install new software中下載
Programming Languages->C/C++ Development Tools.
1.配置環境變數
終端中 輸入 sudo vi ~/.bash_profile
輸入i進入編輯環境 輸入以下內容:
export COCOS2DX_ROOT=~/Desktop/cocos2d-x-2.1.1/
export NDK_ROOT=~/Desktop/android-ndk-r8e/
export ANDROID_SDK_ROOT=~/IDE/android-sdk-macosx/
export PATH=$PATH:$ANDROID_SDK_ROOT/tools
按下esc鍵退出編輯
輸入:wq保存退出
2.在eclipse中創建項目(設項目名稱為test)
cd Desktop/cocos2d-x-2.1.1
./create-android-project.sh
輸入工程標志符com.cwa.test
選擇android版本號:6
輸入工程名:test
cd test/proj.android/
./build_native.sh
打開eclipse,選擇file->new->other->Android->Android Project from Existing code->next->Browse->選擇目錄至cocos2d-x-2.1.4/test/project.android->finish
選擇file->new->other->c/c++->convert to a c/c++ Project->next->選擇上面建好的工程->finish
至此工程test創建完成
3.配置工程屬性
右鍵工程名->properties
3.1 c/c++ Build 把use default build command的勾去掉,在build command中寫(其中test為工程名):
bash ${workspace_loc:/test}/build_native.sh NDK_DEBUG=1 V=1
3.2 點開c/c++ Build 選擇Environment->add
name:NDK_ROOT
value:/Users/zhangyao/Desktop/android-ndk-r8e
3.3 c/c++ General->Path and Symbols->add
/Users/zhangyao/Desktop/android-ndk-r8e/sources/cxx-stl/system/include
全部修改完,點OK
在GUN C++中加入
/Users/zhangyao/Desktop/cocos2d-x-2.1.1/cocos2dx/include
/Users/zhangyao/Desktop/android-ndk-r8e/platforms/android-14/arch-arm/usr/include
在Android中 最好選擇最新的Android4.2.2(確保Andorid模擬機中已經下載好了4.2.2的API)
4.打開項目的AndroidMainfest.xml
把android:icon="@drawable/icon">一行改為android:icon="@drawable/ic_launcher">
android:minSdkVersion="8"
把8改成14
android:minSdkVersion="14"
關閉AndroidMainfest.xml save changes選yes
在src/org.cocos2dx.lib/Cocos2dxActivity.java中
在// ...add to FrameLayout
framelayout.addView(this.mGLSurfaceView);
這句後面加上一句(如果沒有):
this.mGLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);
打開工程jni目錄下的Android.mk
MY_CPP_PATH := $(LOCAL_PATH)/ \
$(LOCAL_PATH)/../../Classes/
MY_FILES_SUFFIX := %.cpp
My_All_Files := $(foreach src_path,$(MY_CPP_PATH),$(shell find $(src_path)/.))
My_All_Files := $(My_All_Files:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)
MY_CPP_LIST := $(filter $(MY_FILES_SUFFIX),$(My_All_Files))
MY_CPP_LIST := $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES := $(MY_CPP_LIST)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_C_INCLUDES += $(shell ls -FR $(LOCAL_C_INCLUDES) | grep $(LOCAL_PATH)/$)
LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES:$(LOCAL_PATH)/%:=$(LOCAL_PATH)/%)
把cocos2d-x引擎的根目錄的cocos2dx/platform/android/java/src文件夾下org文件夾 復制到項目的src包(test/proj.android/src)下替換org文件夾
5.把xcode中所有的自建的類文件(包括.h和.cpp)復制到cocos2d-x-2.1.1/test/Classes
所有的資源文件復制到cocos2d-x-2.1.1/test/Resources
工程的圖標文件放在cocos2d-x-2.1.1/test/res下的文件夾中
至此工程配置完畢。
在對工程作出修改,比如加入/替換新的資源文件,class後,最好對工程clean一下,如果clean後還出現問題,可以重新執行一下build_native命令。
Test 的 模擬器配置
最後,執行以下步驟可以把xcode和eclipse相關聯,讓在xcode中做的更改,eclipse可以自動做出更改。
1.打開Xcode中的test項目(項目名和eclipse中的相同)
選擇classes分組,點刪除,選擇Move to Trash
2.在工程中添加新group,還命名為classes,右鍵classes->addFIles
然後把cocos2dx/test/classes中的類都添加回來,這樣eclipse和xcode就公用了這些文件,在一個中做出更改,另一個里就會自動更改,如下圖:
另:1. Android聯網
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.android中的R文件 ,是伴隨著加入資源等自動更新的
Android 在開發中會自動生成一個 R.java 文件 ,這個文件是自動生成的,最好不要去改。不過有時候這個 java 文件會跟我們捉迷藏,在程序中 R.xx.xxx 會出現經常報錯現象。
1 對著工程點擊滑鼠右鍵 選擇 Build Project,R.java 文件又回來。這樣R.xx.xxx 就能 X 的出來了。
如果不行 試用第二種 方法
2 選擇eclipse/myeclipse 的 clean 這樣R文件也會出現
如果還不行 試用第三種
3 經過上面兩種方法都不行 使用絕招 從別的工程中拷貝一份R文件過來 然後string.xml里隨便改動一下 即可更新R文件
如果還不行 試用第四種
4 經過上面的3種方法都不行 說明我們的工程有問題 好好檢查吧
比如resoure資源中的文件 命名,例result_main.xml,如果寫成Result_main.xml是錯誤的 需要全部小寫
『拾』 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~~~
即表示調用成功。