【发布时间】:2015-03-02 12:16:08
【问题描述】:
我想从 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 正确访问当前场景的子节点?
【问题讨论】:
标签: android android-ndk cocos2d-x