本文将介绍cocos2d-x编译问题集合errorC2440:“类型转换”:无法从“void(__thiscallxx::*)(void)”转换为“cocos2d::SEL_CallFuncN”的详细
本文将介绍cocos2d-x编译问题集合 error C2440: “类型转换”: 无法从“void (__thiscall xx::* )(void)”转换为“cocos2d::SEL_CallFuncN”的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于android studio 编译 cocos2dx C++ 遇到 Error: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN、Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x、cocos2d android分析之-libcocos2dlua.so库、Cocos2d-android (01) 创建一个简单的 cocos2d 应用程序的知识。
本文目录一览:- cocos2d-x编译问题集合 error C2440: “类型转换”: 无法从“void (__thiscall xx::* )(void)”转换为“cocos2d::SEL_CallFuncN”
- android studio 编译 cocos2dx C++ 遇到 Error: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN
- Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x
- cocos2d android分析之-libcocos2dlua.so库
- Cocos2d-android (01) 创建一个简单的 cocos2d 应用程序
cocos2d-x编译问题集合 error C2440: “类型转换”: 无法从“void (__thiscall xx::* )(void)”转换为“cocos2d::SEL_CallFuncN”
项目从cocos2d-x2.14移植到cocos2d-x2.26版本后出现的问题。(在Xcode下可以编译通过,在vs2012中报错)
转载:http://www.jb51.cc/article/p-mmpkspfv-ey.html
1.提示为
error C2440: “类型转换”: 无法从“void (__thiscall xx::* )(void)”转换为“cocos2d::SEL_CallFuncN”
提示前 调用语句为
callfuncN_selector(GameMenu::menuEnter)
menuEnter这个方法里边是没有形参的 导致了这个问题出现
修改办法为
将menuEnter这个方法改成menuEnter(CCNode * node) 加入这个形参即可
2.提示为
error C2440: “类型转换”: 无法从“void (__thiscall xx::* )(void)”转换为“cocos2d::SEL_SCHEDULE” 解决办法同上 但是需要将方法的形参换成 float dt 就可以了
android studio 编译 cocos2dx C++ 遇到 Error: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN
Error:Android Source Generator: Error: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN
java.util.MissingResourceException: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:773)
at org.jetbrains.jps.android.AndroidJpsBundle.getBundle(AndroidJpsBundle.java:22)
at org.jetbrains.jps.android.AndroidJpsBundle.message(AndroidJpsBundle.java:32)
at org.jetbrains.jps.android.AndroidSourceGeneratingBuilder.runAidlCompiler(AndroidSourceGeneratingBuilder.java:688)
at org.jetbrains.jps.android.AndroidSourceGeneratingBuilder.doBuild(AndroidSourceGeneratingBuilder.java:198)
at org.jetbrains.jps.android.AndroidSourceGeneratingBuilder.build(AndroidSourceGeneratingBuilder.java:114)
at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1263)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:940)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1012)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:903)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:736)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:384)
at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:192)
at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:138)
at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:295)
at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:125)
at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:236)
at org.jetbrains.jps.service.impl.SharedThreadPoolImpl.lambda$executeOnPooledThread$0(SharedThreadPoolImpl.java:42)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x
Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x
首先将src文件夹复制到jni文件夹,没有可以新建一个
新建两个文件Android.mk,Application.mk
Application.mk内容如下:
APP_ABI:=armeabiarmeabi-v7ax86
APP_PLATFORM:=android-8
APP_STL:=stlport_static
Android.mk内容如下:
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE :=bullet_static(可随便起)
LOCAL_MODULE_FILENAME:=libbullet(可随便起)
LOCAL_C_INCLUDES:=src/(头文件位置)
(源文件,要列出所有用到的,这里用到BulletSoftBodyBulletDynamics
BulletCollisionsLinearMath)
最后还要加上一句,表示生成静态库如果将STATIC该文SHARED则生成动态库
include$(BUILD_STATIC_LIBRARY)
然后进入命令行
进入jni所在目录
ndk-build
等待编译完成
将三个目录下的libbullet.a分别复制到cocos2dx的安装目录下的
安装目录\Cocos\frameworks\cocos2d-x\prebuilt\android\相应文件下
进入Cocos\frameworks\cocos2d-x\external
新建文件夹Bullet,在Bullet下新建prebuild-mk
将Box2D\prebuild-mk下的Android.mk复制到Bullet/prebuild-mk
修改如下3行
LOCAL_MODULE:=bullet_static
LOCAL_MODULE_FILENAME:=libbullet
LOCAL_SRC_FILES:=../../../prebuilt/android/$(TARGET_ARCH_ABI)/libbullet.a
复制头文件
将bullet3的src的所有文件复制到新建的Bullet文件下
删除不是.h的所有文件
下一步任务繁重,
将所有用到BulletCollisionBulletDynamicsBulletSoftBodyLinearMath目录下的include都加上Bullet/,可以使用Notepad++在Bullet目录搜索Bullet,并替换为Bullet/Bullet,LinearMath并替换为Bullet/LinearMath
进入Cocos\frameworks\cocos2d-x\cocos\prebuilt-mk
在Android.mk
在LOCAL_WHOLE_STATIC_LIBRARIES+=Box2d_static下面添加
LOCAL_WHOLE_STATIC_LIBRARIES+=bullet_static
$(callimport-module,Box2D/prebuilt-mk)下面添加
$(callimport-module,Bullet/prebuilt-mk)
至此已经完成编译静态库
下载地址
cocos2d android分析之-libcocos2dlua.so库
首先把so动态库文件编译出来(通过NDK),然后再 拷贝到android的工程里 libs/armeabi/下,如果libs/armeabi不存在,那就自己创建,最后用eclipse编译项目,这样将自动把so文件打包到apk里;eclipse在打包的时候会根据名的命名规则(lib****.so)去so,开头和结尾必须分别为“lib”和“.so”,否则是不会到apk中的。
生成so文件的规则参考Android.mk文件:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) 清除变量 LOCAL_MODULE := cocos2dlua_shared 定义模块名 LOCAL_MODULE_FILENAME := libcocos2dlua 输出的文件名字,所以会生成libcocos2dlua.so文件 LOCAL_SRC_FILES := \ ../../Classes/AppDelegate.cpp \ 需要编译的源文件 hellolua/main.cpp LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/../../Classes/protobuf-lite \ $(LOCAL_PATH)/../../Classes/runtime \ $(LOCAL_PATH)/../../Classes \ $(LOCAL_PATH)/../../../cocos2d-x/external \ $(LOCAL_PATH)/../../../cocos2d-x/tools/simulator/libsimulator/lib LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes <span>c文件的搜索路径</span> # _COCOS_HEADER_ANDROID_BEGIN # _COCOS_HEADER_ANDROID_END LOCAL_STATIC_LIBRARIES := cocos2d_lua_static LOCAL_STATIC_LIBRARIES += cocos2d_simulator_static 依赖这两个静态库 # _COCOS_LIB_ANDROID_BEGIN # _COCOS_LIB_ANDROID_END include $(BUILD_SHARED_LIBRARY) 生成 动态链接库 so 文件 $(call import-module,scripting/lua-bindings/proj.android) 指定静态库的搜索路径 $(call import-module,tools/simulator/libsimulator/proj.android) # _COCOS_LIB_IMPORT_ANDROID_BEGIN # _COCOS_LIB_IMPORT_ANDROID_END
是否所有的c文件都编译进来了呢?答案是肯定的。其他c文件编译进了其他静态链接库中,层层依赖,但最终都到了.so这个文件中了。
在cocos2d android代码中对这个so进行了加载以便可以调用C++。
Cocos2dxActivity:
protected void onLoadNativeLibraries() { try { ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_Meta_DATA); Bundle bundle = ai.MetaData; String libName = bundle.getString("android.app.lib_name"); System.loadLibrary(libName); } catch (Exception e) { e.printstacktrace(); } }经过一段时间的追寻,静态库依赖关系是这样的:
cocos2dlua_shared-[cocos2d_lua_static,cocos2d_simulator_static]
cocos2d_lua_static-[cocos2d_lua_android_static,cocos2dx_static,pbc,dragonbones_static],pbc,dragonbones_static是自己添加进来的。
cocos2dx_static-[cocosbuilder_static,cocos3d_static,spine_static...lib_socket_static]
cocos2dx_internal_static这个包含了很多基本的类,但是它嵌入的还是蛮深的。
cocos2dx_internal_static--->cocos_extension_static--->cocos_ui_static--->cocostudio_static。
其实没必要这么较真的,反正都是各种依赖,但是找到了总算验证了我们的答案,心里踏实多了。
如何加入已经编译好的静态库呢,这些库就不需要我们去编译了。
分析cocos2d中集成的curl库吧。
文件结构为:
curl
--include 包含了所有的头文件
--prebuilt 包含了所有平台的静态库
--android 又是各种cpu类型
---armeabi
---armeabi-v7a
x86
---Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos_curl_static 库名 LOCAL_MODULE_FILENAME := curl LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcurl.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/android LOCAL_STATIC_LIBRARIES += cocos_ssl_static 依赖的静态库 LOCAL_STATIC_LIBRARIES += cocos_crypto_static include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := cocos_crypto_static LOCAL_MODULE_FILENAME := crypto LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcrypto.a include $(PREBUILT_STATIC_LIBRARY) LOCAL_MODULE := cocos_ssl_static LOCAL_MODULE_FILENAME := ssl LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libssl.a include $(PREBUILT_STATIC_LIBRARY)
PREBUILT_SHARED_LIBRARY
该变量指向一个已编译好的共享库。与BUILD_SHARED_LIBRARY和BUILD_STATIC_LIBRARY不同,此时相应的LOCAL_SRC_FILES不再指定源文件,而是指向这个预编译共享库文件(例如 foo/libfoo.so)。可以在其他模块中,通过使用LOCAL_PREBUILTS变量来引用这个预编译模块。
PREBUILT_STATIC_LIBRARY
与PREBUILT_SHARED_LIBRARY相同,只不过这里是静态库。
参考:1:http://www.jb51.cc/article/p-vddjqwuf-gd.html
2:http://www.jb51.cc/article/p-nslafhez-gv.html
3:http://www.cnblogs.com/rainduck/p/3600472.html 4:
Cocos2d-android (01) 创建一个简单的 cocos2d 应用程序
下载 Cocos2d-android 的源代码:cocos2d-android-1
git@github.com:ZhouWeikuan/cocos2d.git
将项目导入到 eclipse 中。运行实例;
1. 首先创建一个 android 项目,然后将 lib 导入到项目中
2. 对 MainActivity.java 编写
1)首先创建一个 view 对象
private CCGLSurfaceView view = null;
2)取得 CCDirector 对象
CCDirector director = CCDirector.sharedDirector();
3)设置应用程序的属性
1 //设置当前游戏中所使用的view对象
2 director.attachInView(view);
3 //设置是否显示fps
4 director.setDisplayFPS(true);
5 //设置游戏渲染一帧数据所需要的时间(fps=30)
6 director.setAnimationInterval(1/30.0f);
7
8 //生成一个游戏场景对象
9 CCScene scene = CCScene.node();
10
11 //生成一个布景层对象
12 GameLayer gameLayer = new GameLayer();
13 //将布景层对象添加至游戏场景中
14 scene.addChild(gameLayer);
15
16 //运行游戏场景
17 director.runWithScene(scene);
18
19 //setContentView(R.layout.activity_main);
20 setContentView(view);
完整代码:


1 import android.os.Bundle;
2 import android.app.Activity;
3 import android.view.Menu;
4
5 import org.cocos2d.layers.CCScene;
6 import org.cocos2d.nodes.CCDirector;
7 import org.cocos2d.opengl.CCGLSurfaceView;
8
9 public class MainActivity extends Activity {
10
11 private CCGLSurfaceView view = null;
12
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16
17 view = new CCGLSurfaceView(this);
18
19 //取得 CCDirector 对象
20 CCDirector director = CCDirector.sharedDirector();
21
22 //设置应用程序的属性
23 //设置当前游戏中所使用的view对象
24 director.attachInView(view);
25 //设置是否显示fps
26 director.setDisplayFPS(true);
27 //设置游戏渲染一帧数据所需要的时间(fps=30)
28 director.setAnimationInterval(1/30.0f);
29
30 //生成一个游戏场景对象
31 CCScene scene = CCScene.node();
32
33 //生成一个布景层对象
34 GameLayer gameLayer = new GameLayer();
35 //将布景层对象添加至游戏场景中
36 scene.addChild(gameLayer);
37
38 //运行游戏场景
39 director.runWithScene(scene);
40
41 //setContentView(R.layout.activity_main);
42 setContentView(view);
43 }
44
45 @Override
46 public boolean onCreateOptionsMenu(Menu menu) {
47 // Inflate the menu; this adds items to the action bar if it is present.
48 getMenuInflater().inflate(R.menu.main, menu);
49 return true;
50 }
51
52 }


1 import org.cocos2d.layers.CCLayer;
2
3
4 public class GameLayer extends CCLayer {
5 public GameLayer(){
6
7 }
8 }
直接运行就行。
关于cocos2d-x编译问题集合 error C2440: “类型转换”: 无法从“void (__thiscall xx::* )(void)”转换为“cocos2d::SEL_CallFuncN”的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于android studio 编译 cocos2dx C++ 遇到 Error: Can''t find bundle for base name messages.AndroidJpsBundle, locale zh_CN、Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x、cocos2d android分析之-libcocos2dlua.so库、Cocos2d-android (01) 创建一个简单的 cocos2d 应用程序的相关信息,请在本站寻找。
本文标签: