Как получить CCSequence для проверки, если TouchEnded = True

У меня есть спрайт Player, который перемещается с помощью пальца (ccTouchBegan к ccTouchMoved). Я хотел бы, чтобы мое действие было остановлено после TouchEnded, но я не хочу, чтобы оно заканчивало действие на полпути. Поэтому я думаю, что мне нужно, чтобы мой onCallFunc проверил, закончилось ли касание, и если это так, выведите stopAllActions. Любые идеи о том, как я могу это сделать?

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

- (void) 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);
        }

    }

Чего я пытаюсь достичь: я пытаюсь смоделировать движения, сделанные в таких играх, как Pokemon и Zelda, так, чтобы игрок перемещал плитку по плитке, используя сенсорные события.

Обновление: После комментариев, чтобы создать флаг 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");
}

1 ответ

Вы получаете предупреждение о неиспользованной переменной, потому что вы создаете флаг BOOL, а затем никогда не используете его. В вашем коде:

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

Вы создаете флаг BOOL endBOOL внутри ccTouchesEnded, и после завершения этого метода 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");
}
Другие вопросы по тегам