Cocos2D: получить положение слоя в сцене из другого класса

Я пытаюсь получить текущую позицию слоя, добавленного в качестве дочернего в сцену, когда происходит переход сцены. Переход представляет собой отредактированный переход 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];

И вызывая мой предполагаемый метод, делая это:

[сцена getJoinedMapsLayerPosition];

К моему удивлению, пока происходит переход, текущая runningScene является моим классом перехода!

Это дает мне это исключение: -[ExitLTransition getJoinedMapsLayerPosition]: нераспознанный селектор отправлен в экземпляр 0x5e4e20

Мне нужно найти альтернативный способ сделать это.


person Chewie The Chorkie    schedule 05.10.2012    source источник


Ответы (1)


Добавьте это в AppDelegate.h:

@class CCLayer;

@interface AppController : NSObject <UIApplicationDelegate, CCDirectorDelegate,UIGestureRecognizerDelegate>
{
    CCLayer             *mCurrentLayer;

}

@property (nonatomic, retain) CCLayer *currentLayer;

Добавьте это в AppDelegate.mm :

@implementation AppController
@synthesize currentLayer = mCurrentLayer;

В вашем классе инициализации слоя используйте это. Метод всех сцен.

@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]; 
 }
person Guru    schedule 08.10.2012