11

cocos2d で relpaceScene または pushScene を呼び出すと、次のようにトランジションを追加できます。

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1 シーン:シーン]];

しかし、popScene を呼び出すと、パラメーターがなく、トランジションを追加できません。そうですか?必要なトランジションで popScene を作成するにはどうすればよいですか?

4

5 に答える 5

20

cocos2d フォーラムのガイごとに、これは機能しているようです:フォーラムへのリンク

これを CCDirector.h の宣言 -(void)popScene (402 行目) の直後に追加します。

    - (void) popSceneWithTransition: (Class)c duration:(ccTime)t;

Then add this to CCDirector.m, just after the definition of -(void)popScene (line 768):

    -(void) popSceneWithTransition: (Class)transitionClass duration:(ccTime)t;
    {
    NSAssert( runningScene_ != nil, @"A running Scene is needed");

    [scenesStack_ removeLastObject];
    NSUInteger c = [scenesStack_ count];
    if( c == 0 ) {
        [self end];
    } else {
        CCScene* scene = [transitionClass transitionWithDuration:t scene:[scenesStack_ objectAtIndex:c-1]];
        [scenesStack_ replaceObjectAtIndex:c-1 withObject:scene];
        nextScene_ = scene;
    }
}

次のようにメソッドを呼び出すことができます。

[[CCDirector sharedDirector] popSceneWithTransition:[CCSlideInRTransition class] durat
于 2011-08-11T14:12:37.607 に答える
0

必要に応じてシーンとそのテクスチャをクリーンアップできるように、実際にシーンをリリースする上記のより簡潔なバージョン。

CCDirector+addition.h

#import "cocos2d.h"

@interface CCDirector (addition)

- (void) popSceneWithTransition:(Class)transitionClass duration:(ccTime)t;

@end

CCDirector+addition.m

#import "CCDirector+addition.h"

@implementation CCDirector (addition)

- (void) popSceneWithTransition:(Class)transitionClass duration:(ccTime)t {
    [_scenesStack removeLastObject];

    NSUInteger count = [_scenesStack count];
    NSAssert(count > 0, @"Don't popScene when there aren't any!");

    CCScene* scene = [transitionClass transitionWithDuration:t scene:[_scenesStack lastObject]];
    [self replaceScene:scene];
}

@end
于 2013-12-23T21:12:18.160 に答える
0

cocos2d 2.1 で動作するように Kailash の回答を修正しました。

CCDirector+additions.h

#import "cocos2d.h"

@interface CCDirector (additions)
-(void)popSceneWithTransition:(Class)transitionClass duration:(ccTime)t;
@end

CCDirector+additions.m

#import "CCDirector+additions.h"

@implementation CCDirector (additions)
-(void)popSceneWithTransition:(Class)transitionClass duration:(ccTime)t {
    [self popScene];

    // Make Transition
    if (_nextScene) {
        CCScene* scene = [transitionClass transitionWithDuration:t scene:_nextScene];
        [_scenesStack replaceObjectAtIndex:([_scenesStack count] - 1) withObject:scene];
        _nextScene = scene;
    }
}
@end
于 2013-08-19T03:46:35.450 に答える
0

Cocos2d の内部をいじる必要なく、次のように実行できます。

CCDirector *director  = [CCDirector sharedDirector];
CCScene *currentScene = [director runningScene];
CGSize contentSize    = [currentScene contentSize];
CCLayerColor *black   = [[CCLayerColor alloc] initWithColor:ccc4(0, 0, 0, 0) width:contentSize.width height:contentSize.height];
[currentScene addChild:black];
[black runAction:[CCSequence actionOne:[CCFadeTo actionWithDuration:1.0f opacity:255]
                                   two:[CCCallFunc actionWithTarget:director selector:@selector(popScene)]]];
于 2016-09-24T14:08:03.107 に答える