javacocos2dx
『壹』 cocos2dx c++調用java時 類找不到
JNI(Java Native Interface):Java的本地調用。本文通過JNI在Cocos2d-x3.3RC0中完成Java與C++的互調。具體實現以下兩個功能:(1)通過Android sdk的API得到應用程序的包名,並傳遞給C++層函數。(2)通過C++函數調用Android的Java層函數,顯示一個對話框。點擊按鈕退出程序。
『貳』 怎樣設置cocos2dx背景透明
就如果你想讓你的activity透明,很簡單,只需要4步。1. 打開AndroidManifest.xml文件,添加Translucent到
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
2.打開Cocos2dxActivity.java文件,添加
getWindow().setFormat(PixelFormat.TRANSLUCENT);
3.打開cocos2d/cocos/2d/CCDirector.cpp文件,找到setGLDefaultValues()函數,修改最後一個alpha值,范圍從0.0f到1.0f。
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
4.打開cocos2d/cocos/2d/platform/android/nativeactivity.cpp,找到engine_init_display(struct engine* engine)函數,修改如下數組
從
const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_BLUE_SIZE, 5,
EGL_GREEN_SIZE, 6,
EGL_RED_SIZE, 5,
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};
到
const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
//EGL_BLUE_SIZE, 5, -->delete
//EGL_GREEN_SIZE, 6, -->delete
//EGL_RED_SIZE, 5, -->delete
EGL_BUFFER_SIZE, 32, //-->new field
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};
『叄』 如何將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
『肆』 請問java轉cocos2dx游戲開發的難度、學習曲線
風險肯定是有的~轉過來又倆問題,一個是沒做過游戲~整個游戲邏輯可能有問題~另一個是c++不熟悉,工程項目稍微大一點的話怕內存泄露~cocos2d-x肯定是用來做手機游戲的~萬一有泄露可能整個程序直接崩了~主要怕這個
『伍』 cocos2dx怎麼遍歷資源文件夾里的文件
第一步在:在ZipFile添加方法,因為_dataThread是個私有的,盡量不改變源碼的情況下,添加一個get方法是最好的
這個getAllFile可以返回所有的文件目錄
std::vector<std::string>ZipFile::getAllFile(){
std::vector<std::string> vec;
ZipFilePrivate::FileListContainer::iterator it1;
for(it1=_dataThread->fileList.begin();it1!=_dataThread->fileList.end();++it1) {
vec.push_back(it1->first.c_str());
}
return vec;
}
第二步:使用getAllFile的返回值做遍歷,這里直接帖出iOS和Android的同時遍歷吧,同時搜索png和jpg的圖片,可以用於載入資源,記得導入頭文件
#include "support/zip_support/ZipUtils.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include <dirent.h>
#include <sys/stat.h>
#else
#include "platform/CCCommon.h"
#include "support/zip_support/unzip.h"
#include "jni/Java_org_cocos2dx_lib_Cocos2dxHelper.h"
#endif
void ResourceLoadingLayer::getAllFile(std::string folderPath,int depth, std::vector<std::string> *list, std::string head){
#if CC_PLATFORM_IOS == CC_TARGET_PLATFORM
DIR *dp;
structdirent *entry;
structstat statbuf;
if((dp =opendir(folderPath.c_str())) ==NULL) {
fprintf(stderr,"cannot open directory: %s\n", folderPath.c_str());
return;
}
chdir(folderPath.c_str());
while((entry =readdir(dp)) != NULL) {
lstat(entry->d_name,&statbuf);
if(S_ISDIR(statbuf.st_mode)) {
if(strcmp(".",entry->d_name) == 0 ||
strcmp("..",entry->d_name) ==0)
continue;
getAllFile(entry->d_name,depth+4,list,head+entry->d_name);
} else {
if (head.length() ==0) {
string name = entry->d_name;
if (name.length()>3 && name.rfind(".") > 0 && (name.substr(name.rfind(".")+1,3) == "jpg" || name.substr(name.rfind(".")+1,3) == "png")) {
list->push_back(entry->d_name);
}
} else {
string filename = head+"/" +entry->d_name;
if (filename.length()>3 && filename.rfind(".") > 0 && (filename.substr(filename.rfind(".")+1,3) == "jpg" || filename.substr(filename.rfind(".")+1,3) == "png")) {
list->push_back(filename);
}
}
}
}
chdir("..");
closedir(dp);
#else
ZipFile* pFile = new ZipFile(getApkPath(),"assets/");
vector<string> vec = pFile->getAllFile();
for (int i=0; i<vec.size(); i++) {
string file = vec.at(i);
if (file.compare("assets/")) {
file = file.substr(7,file.length());
}
if(file.substr(0,folderPath.length()) == folderPath ){
string filename = file.substr(file.rfind("/")+1,file.length());
if (filename.length()>3 && filename.rfind(".") >0 && (filename.substr(filename.rfind(".")+1,3) =="jpg" || filename.substr(filename.rfind(".")+1,3) =="png") {
list->push_back(filename);
}
}
}
#endif
}
第三步,使用:
首先得拿到資源文件夾的完整路徑,方法有很多,只舉其一:
在HelloWorld的工程下的資源根目錄有一張HelloWorld.png圖片,我們可以直接獲取它在程序中的完整路徑,即
string fullpath = CCFileUtils::sharedFileUtils()->fullPathForFilename("HelloWorld.png");
所以 string resPath = fullpath.substr(0,fullpath.rfind("/")+1);
得到了完整的資源路徑後,
vector<string> vec;
getAllFile(resPath, 0, &vec, "");
這樣就大功告成了,vec會保存所有的png或jpg的資源,會帶head名的哦,比如說bg/welcome.jpg
上面是遍歷所有的文件夾,如果單獨遍歷資源文件下的某個目錄,即是
getAllFile(resPath+"xxx",0,&vec,""); xxx 為資源根目錄下的子目錄,這樣就可以分別載入某個目錄了
『陸』 Cocos2dx適不適合開發安卓單機游戲
cocos2dx適合2D或者偽3D的手機游戲。一般來說小型和中型項目都可以用。所以你說的如果是2D游戲,就可以使用。但是cocos2dx是用C++或者lua,js等編寫完畢和java混編以後成為安卓游戲。理論上cocos2dx可以跨所有平台。就是說IOS,ANDROID,WP的游戲都可以使用。
『柒』 cocos2dx android切換後台為什麼要重建紋理
android系統下,切入後台,則紋理全部失效,從後台切到前台,cocos2d-x會重新載入紋理。這樣有兩個問題:
1、如果紋理較多的話,載入紋理會卡很長時間,就像死機一樣。 變通解決方法是修改引擎代碼,增加一個進度條提示。
2、文字描邊等用到RenderTexture的地方會出現異常紋理,文字會花掉。 暫時不知道原因,無解。
這里提供一個解決方案,解決掉紋理失效的問題,初步測試沒有發現大的問題,但是具體還要看實際運行情況,畢竟android機器太多了。
1、Cocos2dXGLSurfaceView.java代碼修改
[cpp]view plain- @Override
- publicvoidonPause(){
- this.queueEvent(newRunnable(){
- @Override
- publicvoidrun(){
- Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleOnPause();
- }
- });
- //super.onPause();
- }
2、main.cpp中修改
[cpp]view plain- voidJava_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*env,jobjectthiz,jintw,jinth)
- {
- InitCrashReport();
- if(!CCDirector::sharedDirector()->getOpenGLView())
- {
- CCEGLView*view=CCEGLView::sharedOpenGLView();
- view->setFrameSize(w,h);
- AppDelegate*pAppDelegate=newAppDelegate();
- CCApplication::sharedApplication()->run();
- }
- //else
- //{
- //ccDrawInit();
- //ccGLInvalidateStateCache();
- //CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
- //CCTextureCache::reloadAllTextures();
- //CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND,NULL);
- //CCDirector::sharedDirector()->setGLDefaultValues();
- //}
- }
『捌』 游戲製作是學c語言,還是java,還是Cocos2d-x
首先你要知道你想做什麼游戲。
1、PC游戲:PC端游戲就比較隨意了,各種語言都可以,C/C++、Java、C#,還有Mac平台的話需要Swift、Object-C。不過除非你是開發非常小型的游戲(貪吃蛇、俄羅斯方塊之類),否則你不可能直接使用這些語言完全自己開發出一個完整的游戲,你需要學習一個游戲引擎,比如你說的Cocos2dx或是Unity。藉助游戲引擎你就可以開發中型、大型游戲了。
2、手機游戲:手機端限制就比較多了,安卓的話是Java優先、C/C++也行,蘋果ios的話就是Swift、Object-C。不過與PC同理,你要開發游戲建議還是學游戲引擎Cocos2dx、Unity都可以開發手機游戲。
3、Web游戲:以往開發Web游戲都是清一色Flash,但是現在Flash已經不推薦使用了,所以開發Web游戲還是以HTML5+JavaScript為主。同樣小型游戲可以直接去寫JavaScript,稍大的游戲還是要游戲引擎,Cocos2djs和Unity也都可以發布Web版本。
總之,開發語言是基礎,要真打算開發游戲,還是要有游戲引擎。
『玖』 如何在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是錯誤的 需要全部小寫