0

シーンの遷移が発生しているときに、シーンに子として追加されたレイヤーの現在の位置を取得しようとしています。トランジションは編集された Cocos2D トランジションであり、新しいレイヤーが表示されている間にレイヤーを画面からスライドさせます。update メソッドを使用して、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 * シーン = (JoinedMapsScene *)[[CCDirector sharedDirector] runningScene];

そして、これを行うことで私の想定されるメソッドを呼び出します:

[シーン getJoinedMapsLayerPosition];

驚いたことに、移行が行われている間、現在の runningScene が私の移行クラスです!

それは私のこの例外を与える: -[ExitLTransition getJoinedMapsLayerPosition]: 認識されないセレクターがインスタンス 0x5e4e20 に送信されました

これを行う別の方法を見つける必要があります。

4

1 に答える 1

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]; 
 }
于 2012-10-08T18:47:28.320 に答える