0

指のスワイプ (ccTouchBegan から ccTouchMoved) を使用して移動する Player スプライトがあります。TouchEnded でアクションを停止したいのですが、途中でアクションを終了させたくありません。したがって、タッチが終了したかどうかを確認し、終了した場合はstopAllActionsを実行するためにonCallFuncが必要だと考えています。どうすればこれを行うことができるかについてのアイデアはありますか?

-(void) onCallFunc
{
    // Check if TouchEnded = True if so execute [Player stopAllActions];
    CCLOG(@"End of Action... Repeat");
}

-(無効) ccTouchMoved:

//Move Top
        if (firstTouch.y < lastTouch.y && swipeLength > 150 && xdistance < 150 && xdistance > -150) {        
            CCMoveTo* move = [CCMoveBy actionWithDuration:0.2  position:ccp(0,1)];
            CCDelayTime* delay = [CCDelayTime actionWithDuration:1];
            CCCallFunc* func = [CCCallFunc actionWithTarget:self selector:@selector(onCallFunc)];
            CCSequence* sequence = [CCSequence actions: move, delay, func, nil];
            CCRepeatForever* repeat = [CCRepeatForever actionWithAction:sequence];
            [Player runAction:repeat];
            NSLog(@"my top distance = %f", xdistance);
        }
        if (firstTouch.y < lastTouch.y && swipeLength > 151 && xdistance < 151 && xdistance > -151) {
            NSLog(@"my top distance = %f", xdistance);
        }

    }

私が達成しようとしていること:タッチ イベントを使用してプレイヤーにタイルごとに移動させることで、ポケモンやゼルダなどのゲームで行われる動きをシミュレートしようとしています。

更新: BOOL フラグを作成するためのコメントの後、Objective-C を使用するのは初めてですが、BOOL フラグを使用しようとしています。各セクションで未使用の変数の警告が表示されます。

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    BOOL endBOOL = YES;
    NSLog(@"Stop Actions");
}

-(void) onCallFunc
{
    if(endBOOL == YES){
        [Player stopAllActions];
    }
    // Check if TouchEnded = True if so execute [Player stopAllActions];
    CCLOG(@"End of Action... Repeat");
}
4

1 に答える 1

0

BOOL フラグを作成してから使用しないため、未使用の変数の警告が表示されます。あなたのコードで:

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    BOOL endBOOL = YES;
    NSLog(@"Stop Actions");
}

ccTouchesEnded 内で BOOL フラグ endBOOL を作成し、そのメソッドが完了すると、BOOL はメモリに保持されなくなります。これを実現するには、インスタンス変数を作成する必要があります。

.h 内にこれを追加します

// Inside .h
BOOL endBOOL;

次に、コードを次のように変更します

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    endBOOL = YES;
    NSLog(@"Stop Actions");
}

そうすれば、endBOOL が保持され、if ステートメントで使用できます。(endBOOL == YES) は必要ないことにも注意してください。これを簡単に使用できます:

-(void) onCallFunc
{
    if(endBOOL){
        [Player stopAllActions];
    }
    // Check if TouchEnded = True if so execute [Player stopAllActions];
    CCLOG(@"End of Action... Repeat");
}
于 2013-05-07T05:54:00.853 に答える