我正在尝试在场景转换过程中检索作为场景中的子项添加的图层的当前位置。过渡是一个经过编辑的Cocos2D过渡,它会在显示新图层时将图层滑出屏幕。我使用更新方法在CCActionEase中创建了自己的实现:
#import "JoinedMapsScene.h"
#import "JoinedMapsLayer.h"
@implementation CCEaseInWithPercentMult
-(void) update: (ccTime) t
{
[other update: powf(t,rate)];
CCScene * scene = [[CCDirector sharedDirector] runningScene];
CCNode* layer = [scene getChildByTag:0];
NSLog(@"% .2f",layer.position.x); //returns 0
NSLog(@"% .2f",layer.position.y); //returns 0
}
然而,当转换发生时,它们返回0。大概是因为我得到了相对于自己的位置?
编辑:
我发现这不起作用。我通过这样做指向正确的类来正确访问我当前的场景:
JoinedMapsScene * scene =(JoinedMapsScene *)[[CCDirector sharedDirector] runningScene];
通过这样做来调用我假设的方法:
[scene getJoinedMapsLayerPosition];
令我惊讶的是,当转换发生时,当前的runningScene是我的过渡类!
它给出了我的这个例外: - [ExitLTransition getJoinedMapsLayerPosition]:无法识别的选择器发送到实例0x5e4e20
我需要找出另一种方法。
答案 0 :(得分:0)
在AppDelegate.h中添加:
@class CCLayer;
@interface AppController : NSObject <UIApplicationDelegate, CCDirectorDelegate,UIGestureRecognizerDelegate>
{
CCLayer *mCurrentLayer;
}
@property (nonatomic, retain) CCLayer *currentLayer;
在AppDelegate.mm中添加:
@implementation AppController
@synthesize currentLayer = mCurrentLayer;
在你的Layer init类中使用它。在所有场景方法中。
@implementation MyMainMenu
+(CCScene *) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
// 'layer' is an autorelease object.
MyMainMenu *layer = [MyMainMenu node];
AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
app.currentLayer = layer;
// add layer as a child to scene
[scene addChild: layer];
// return the scene
return scene;
}
你可以在项目的任何地方查看..
AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
if([app.currentLayer isKindOfClass:[MyMainMenu class]])
{
MyMainMenu *mm = (MyMainMenu*) app.currentLayer;
[mm calFunction];
}