當前位置:首頁 » 編程語言 » javacocos2dx

javacocos2dx

發布時間: 2022-08-20 17:14:54

『壹』 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
  1. @Override
  2. publicvoidonPause(){
  3. this.queueEvent(newRunnable(){
  4. @Override
  5. publicvoidrun(){
  6. Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleOnPause();
  7. }
  8. });
  9. //super.onPause();
  10. }

2、main.cpp中修改

[cpp]view plain
  1. voidJava_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*env,jobjectthiz,jintw,jinth)
  2. {
  3. InitCrashReport();
  4. if(!CCDirector::sharedDirector()->getOpenGLView())
  5. {
  6. CCEGLView*view=CCEGLView::sharedOpenGLView();
  7. view->setFrameSize(w,h);
  8. AppDelegate*pAppDelegate=newAppDelegate();
  9. CCApplication::sharedApplication()->run();
  10. }
  11. //else
  12. //{
  13. //ccDrawInit();
  14. //ccGLInvalidateStateCache();
  15. //CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
  16. //CCTextureCache::reloadAllTextures();
  17. //CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND,NULL);
  18. //CCDirector::sharedDirector()->setGLDefaultValues();
  19. //}
  20. }

『捌』 游戲製作是學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是錯誤的 需要全部小寫

熱點內容
上傳網頁用什麼伺服器 發布:2024-05-03 08:57:08 瀏覽:908
掌握ftp伺服器的配置與管理 發布:2024-05-03 08:06:58 瀏覽:766
伺服器搭建的函數 發布:2024-05-03 07:54:44 瀏覽:815
php包含數組 發布:2024-05-03 07:53:51 瀏覽:702
短暫記憶存儲信息是有限的 發布:2024-05-03 07:48:14 瀏覽:537
java集合對象 發布:2024-05-03 07:32:13 瀏覽:916
蘋果自帶腳本 發布:2024-05-03 07:16:04 瀏覽:569
商城導航源碼 發布:2024-05-03 07:14:15 瀏覽:552
shell腳本日誌輸出 發布:2024-05-03 06:31:04 瀏覽:713
伺服器快捷方式是什麼意思 發布:2024-05-03 06:28:18 瀏覽:108