1

シンプルなゲームアプリを開発しています。

2 つの画面を切り替えるページネーションを使用したスクロール ビューのように、2 つの画面を左に 1 つ、右にもう 1 つ持つ必要があります。RootViewController クラスの助けを借りてスワイプを検出し、左右の画面を正常にスワイプしています。

しかし、問題は、画面の中央に配置された単一のスプライトでこのアクションを実行する両方の画面で、rotateBy アクションを無限に実行する必要があることです。

SelectWorld と呼ばれるメイン シーンを使用しています。2 つはサブ シーンです。最初の画面はファクトリーと呼ばれ、他の画面はスタックと呼ばれます。以下は私のコードです:

ワールド画面の選択:

@implementation SelectWorld

+(CCScene*)scene
{
    CCScene* scene = [CCScene node];
    SelectWorld* layer = [SelectWorld node];
    [scene addChild:layer];

    return scene;
}

-(id)init
{
    if((self = [super init]))
    {
        [RootViewController singleton].swipeCallBackHandler = self;
        [[RootViewController singleton] enableSwipeDetection];

        factory = [[ColorfulFactory scene] retain];
        stack = [[CoinsStack scene] retain];

        [self addChild:factory];
        isOnFactory = YES;
    }

    return self;
}

-(void)swipedLeft
{
    if(isOnFactory)
    {
        [self removeAllChildrenWithCleanup:YES];

        isOnFactory = NO;
        CCTransitionScene* transitionalScene = [CCTransitionSlideInR transitionWithDuration:0.3 scene:stack];
        [[CCDirector sharedDirector] replaceScene:transitionalScene];
    }
}

-(void)swipedRight
{
    if(!isOnFactory)
    {
        [self removeAllChildrenWithCleanup:YES];

        isOnFactory = YES;
        CCTransitionScene* transitionalScene = [CCTransitionSlideInL transitionWithDuration:0.3 scene:factory];
        [[CCDirector sharedDirector] replaceScene:transitionalScene];
    }
}

これはファクトリのみのコードです。同じことがスタックにも当てはまります-

@implementation ColorfulFactory

+(CCScene*)scene
{
    CCScene* scene = [CCScene node];
    ColorfulFactory* layer = [ColorfulFactory node];
    [scene addChild:layer];

    return scene;
}

-(id)init
{
    if((self = [super init]))
    {
        CGSize size = [CCDirector sharedDirector].winSize;

        CCLabelTTF* info = [CCLabelTTF labelWithString:@"Colorful Factory" fontName:@"Helvetica" fontSize:35.0];
        info.position = ccp(size.width/2, size.height-50);
        [self addChild:info];

        CCSprite* sprite = [CCSprite spriteWithFile:@"Icon.png"];
        sprite.position = ccp(size.width/2, size.height/2);
        [self addChild:sprite];
        sprite.tag = 123;

        CCRotateBy* rotateBy = [CCRotateBy actionWithDuration:60 angle:360.0];
        CCRepeatForever* repeatForever = [CCRepeatForever actionWithAction:rotateBy];
        [sprite runAction:repeatForever];
        repeatForever.tag = 456;
    }

    return self;
}

問題は、最初の 2 回のスワイプ アクションは正常に実行されていますが、2 回または 3 回以上スワイプしようとするとすぐにアクションが停止することです。両方のクラスでこれを止めるために一行も書いていません。私はそれを永久に実行する必要があります。

4

1 に答える 1