سؤال

I am trying to load a CCScene and then change some of it's properties before using the scene. When I try to change it's properties it says [CCScene setProperty] - unrecognized selector sent to instance, even though I casted the CCScene to the correct class with the public properties!

#import "MainScene.h"
#import "Gameplay.h"

@implementation MainScene
-(void)play:(CCButton *)sender{
    Gameplay *gameplay = (Gameplay *)[CCBReader loadAsScene:@"Gameplay"];
    NSLog(@"%@\n",[gameplay class]);
}
@end

This code outputs CCScene instead of outputting Gameplay. How do I fix this?

هل كانت مفيدة؟

المحلول

This is not a problem of the cast. If you peform loadAsScene the CCBReader will wrap the Gameplay.ccb root node into a scene. You can read that in the documentation:

... Loads a ccbi-file with the specified name and wraps it in a CCScene node.

If you use the console to print the children of this node:

(lldb) po scene.children

You will get following result:

<__NSArrayM 0x13a38720>(
  <Gameplay = 0x13a3f8a0 | Name = >
)

This shows how your gameplay class is wrapped into a CCScene. If you want to access the Gameplay node you need to access the first child of the CCScene:

    Gameplay *gameplay = (Gameplay *)[[CCBReader loadAsScene:@"GameplayScene"] children] [0];

Feel free to use a different solution that doesn't do all the work in one line.

نصائح أخرى

Alternatively you can use

SceneClass *sceneInstance = [CCBReader load:NSStringFromClass([SceneClass class])];

This results in:

(lldb) po sceneInstance
<SceneClass = 0x8270b70 | Name = >
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top