Cocos2d iphone Cocos2d-使用子类中的getChildByTag获取场景中的对象
我有一个cocos2d场景,其中有几个子对象组成了屏幕显示。其中一些子对象需要相互通信,以便可以更新显示 我决定不在场景图中传递对象的引用,而是标记所有cocos2d节点,传递标记值,然后每当需要场景对象时,我就使用控制器使用标记检索对象 这意味着我没有太多关于四处飞行的对象的引用,我的想法是这样会更干净,并且不太可能在不应该保留的对象被保留时导致内存问题 我使用以下代码检索特定节点:Cocos2d iphone Cocos2d-使用子类中的getChildByTag获取场景中的对象,cocos2d-iphone,Cocos2d Iphone,我有一个cocos2d场景,其中有几个子对象组成了屏幕显示。其中一些子对象需要相互通信,以便可以更新显示 我决定不在场景图中传递对象的引用,而是标记所有cocos2d节点,传递标记值,然后每当需要场景对象时,我就使用控制器使用标记检索对象 这意味着我没有太多关于四处飞行的对象的引用,我的想法是这样会更干净,并且不太可能在不应该保留的对象被保留时导致内存问题 我使用以下代码检索特定节点: CCNode* node = [[[[CCDirector sharedDirector] runningSc
CCNode* node = [[[[CCDirector sharedDirector] runningScene] getChildByTag:TAG_MY_LAYER] getChildByTag:TAG_MY_OBJECT];
if (node != nil ){
NSAssert([node isKindOfClass:[myObject class]], @"node is not a myObject");
myObject* mo = (myObject*)node;
...
other stuff
....
问题:使用过渡初始化场景时,此方法不起作用。对运行场景的调用将返回转换,而不是新场景。如果您等待-onentertransitiondFinish,那么它仍然不起作用。似乎在此之后您必须等待一段时间(可能是旧场景被破坏),然后才能删除过渡,runningScene就是您的新场景
是否有可能获取对场景图中我可以调用getChildByTag的部分的引用,并且无论场景转换的状态如何,它都将获取我的标记对象?我建议您不要使用这种方法,而是研究Singleton类。 在本例中,Singleton类GameSettings.h用于跟踪变量globalScore 现在,您可以通过调用
[[GameSettings sharedGameSettings]globalScore]代码>
当您需要告诉另一个场景某些值已更改时,只需使用通知中心即可
游戏设置
#import <Foundation/Foundation.h>
#import "cocos2d.h"
@interface GameSettings : NSObject {
int globalScore;
}
@property (nonatomic, assign) int globalScore;
@end
另一个想法(如果你需要经常在两个场景之间传递数据)是让一个场景成为另一个场景的代理。@erik-你的答案与所问问题的相关性如何
您可以将代码移动到onEnter()方法,该方法似乎是在转换到新场景完成后执行的,即:
-(void)onEnter {
[super onEnter];
CCNode* node = [[[[CCDirector sharedDirector] runningScene] getChildByTag:TAG_MY_LAYER] getChildByTag:TAG_MY_OBJECT];
if (node != nil ){
NSAssert([node isKindOfClass:[myObject class]], @"node is not a myObject");
myObject* mo = (myObject*)node;
...
other stuff
....
}
}
-(void)onEnter {
[super onEnter];
CCNode* node = [[[[CCDirector sharedDirector] runningScene] getChildByTag:TAG_MY_LAYER] getChildByTag:TAG_MY_OBJECT];
if (node != nil ){
NSAssert([node isKindOfClass:[myObject class]], @"node is not a myObject");
myObject* mo = (myObject*)node;
...
other stuff
....
}
}