Cocos2dx 3.0失败..build_native.py(构建到Android)
cppCocos2dx 3.0失败..build_native.py(构建到Android),android,java-native-interface,cocos2d-x,cocos2d-x-3.0,Android,Java Native Interface,Cocos2d X,Cocos2d X 3.0,cpp #包括“HelloWorldScene.h” 使用\u NS\u CC; #如果(CC_目标_平台==CC_平台_ANDROID) #包括 #包括 外行 “C” { JNIEXPORT jint JNICALL Java_org_cocos2dx_cpp_AppActivity_cppSum(JNIEnv*env,jobject obj) { MessageBox(“从Java11调用我”、“JNITest11”); HelloWorld::doFiring();//我不想执行。。。。。
#包括“HelloWorldScene.h”
使用\u NS\u CC;
#如果(CC_目标_平台==CC_平台_ANDROID)
#包括
#包括
外行
“C”
{
JNIEXPORT jint JNICALL Java_org_cocos2dx_cpp_AppActivity_cppSum(JNIEnv*env,jobject obj)
{
MessageBox(“从Java11调用我”、“JNITest11”);
HelloWorld::doFiring();//我不想执行。。。。。
日志(“CCCCCC”);
返回121;
}
}
#恩迪夫
场景*HelloWorld::CreateSecene()
{
自动场景=场景::创建();
自动图层=HelloWorld::create();
场景->添加子对象(层);
返回场景;
}
bool HelloWorld::init()
{
如果(!Layer::init())
{
返回false;
}
返回true;
}
void HelloWorld::doFiring()
{
MessageBox(“从Java11调用我”、“JNITest11”);
}
生成此页面。。
错误消息:
[armeabi]Compile++thumb:cocos2dcpp_sharedHelloWorld::doFiring()不是静态函数。
你可以打电话
Director::getInstance()->getRunningScene();
为了得到现场,于是找到了有做消防功能的孩子。
也许您的代码应该是:
#include "HelloWorldScene.h"
USING_NS_CC;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <string.h>
#include <jni.h>
extern
"C"
{
JNIEXPORT jint JNICALL Java_org_cocos2dx_cpp_AppActivity_cppSum(JNIEnv* env, jobject obj)
{
MessageBox( "Call me From Java11", "JNI Test11" );
HelloWorld::doFiring(); //I wan't excute.....
log("CCCCCCCCCCC");
return 121;
}
}
#endif
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
return true;
}
void HelloWorld::doFiring()
{
MessageBox( "Call me From Java11", "JNI Test11" );
}
auto children=Director::getInstance()->getRunningScene()->getChildren();
用于(自动子对象:子对象)
{
自动图层=动态投影(子级);
如果(层){
layer.doFiring();
}
}
听起来doFiring不是声明为静态的,而是一个成员函数,但您可以像调用静态类方法一样调用它:HelloWorld::doFiring()
auto children = Director::getInstance()->getRunningScene()->getChildren();
for(auto child:children)
{
auto layer = dynamic_cast<HelloWorld*>(child);
if (layer) {
layer.doFiring();
}
}