1

CCScene をロードして、シーンを使用する前にそのプロパティの一部を変更しようとしています。プロパティを変更しようとすると、 [CCScene setProperty] - パブリック プロパティを使用して CCScene を正しいクラスにキャストしたにもかかわらず、認識されないセレクターがインスタンスに送信されました!

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

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

このコードは、Gameplay を出力する代わりに CCScene を出力します。これを修正するにはどうすればよいですか?

4

2 に答える 2

3

これはキャストの問題ではありません。を実行loadAsSceneすると、 Gameplay.ccbルート ノードがシーンにCCBReaderラップされます。 ドキュメントでそれを読むことができます:

... 指定された名前の ccbi ファイルをロードし、CCScene ノードにラップします。

コンソールを使用してこのノードの子を出力する場合:

(lldb) po scene.children

次の結果が得られます。

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

これは、ゲームプレイ クラスがCCScene. ノードにアクセスしたい場合はGameplay、 の最初の子にアクセスする必要がありますCCScene:

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

すべての作業を 1 行で実行しない別のソリューションを自由に使用してください。

于 2014-04-20T11:47:15.480 に答える
0

あるいは、使用することができます

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

これにより、次の結果が得られます。

(lldb) po sceneInstance
<SceneClass = 0x8270b70 | Name = >
于 2014-04-20T22:04:13.657 に答える