我想从Android JNI访问cocos2d-x场景的子节点。
场景在 AppDelegate 中创建,如下所示:
Director::getInstance()->runWithScene(MainScene::create());
//scene node has several children
该场景包含几个应该在JNI中操作的子画面。在场景启动中,精灵添加如下:
Scene* MainScene::createScene() {
auto scene = Scene::create();
auto layer = MainScene::create();
scene->addChild(layer);
return scene;
}
bool MainScene::init() {
...
this->addChild(sprite, 7);
...
}
但是当我想访问 JNI 中的精灵时,场景不包含任何子项。我试图通过标记名访问子项,并按如下方式计算子项。
//INITIALIZE COCOS2D
void cocos_android_app_init (JNIEnv* env, jobject thiz) {
AppDelegate *pAppDelegate = new AppDelegate();
}
//ACCESS SPRITES IN SCENE
JNIEXPORT void JNICALL Java_com_example_appname_AppActivity_manipulateSprite
( JNIEnv* env, jobject thiz){
//MANIPULATE SCENE IN GL THREAD:
Director::getInstance()->getScheduler()->performFunctionInCocosThread([&](){
//ACCESS CHILDREN BY TAG
auto child = Director::getInstance()->getRunningScene()->getChildByTag(7);
auto sprite = dynamic_cast<cocos2d::Sprite*>(child);
//this sprite is NULL, but I set the sprite with
//tag "7" when the scene is created
//COUNT THE CHILDREN
int child_count = Director::getInstance()
->getRunningScene()->getChildrenCount();
//why is the number of children zero?
}
}
还请注意,当从JNI向场景附加新的子节点时,可以访问这些新创建的子节点,但不能访问初始化期间创建的子节点。
此外,我尝试在createScene方法中为场景图层指定一个标记名,但getRunningScene似乎没有子图标。
如何正确地从JNI访问当前场景的子节点?
答案 0 :(得分:0)
尝试调用replaceScene并在第一次调用JNI方法时重新启动场景。