CCMotionStreak работает с CCMoveTo - PullRequest
4 голосов
/ 07 мая 2011

Я пытаюсь использовать CCMotionStreak, чтобы нарисовать путь с помощью CCSprite.

Init:

CCMotionStreak* streak;
streak = [CCMotionStreak streakWithFade:100 minSeg:1 image:@"streak.png" width:5
    length:3 color:ccc4(0, 255, 255, 255)];streak.position = self.theHero.heroSprite.position;

Когда касание заканчивается:

-(void) ccTouchEnded:(UITouch*)touch withEvent:(UIEvent *)event
{
    [self unschedule:@selector(doStep:)];

    CGPoint touchLocation = [touch locationInView: [touch view]];
    CGPoint curPosition = [[CCDirector sharedDirector] convertToGL:touchLocation];

    [self.theHero.heroSprite stopAllActions];
        //cal the duration, speed is set to 85.0f
    float du = ccpDistance(self.theHero.heroSprite.position, curPosition) / 85.0f;
    [self.theHero.heroSprite runAction:[CCMoveTo actionWithDuration:du
                                                           position:curPosition]];

    [self schedule:@selector(doStep:)];
}

- (void)doStep:(ccTime)delta
{
        //update the position
    [streak setPosition:self.theHero.heroSprite.position];
}

Когда я запускаю демонстрацию, CCMotionStreak прекрасно рисует линию в первый раз Я коснулся экрана, затем, когда спрайт останавливается, я пытался коснуться где-то еще на экране и CCMotionStreak рисует вторую линию успешно, но я заметил что линии CCMotionStreak немного «трясутся» (немного смещаются) во время перемещения спрайта, а затем «возвращаются в нормальное положение», когда спрайт перестает двигаться.

Надеюсь, кто-нибудь подскажет, спасибо :)

1 Ответ

0 голосов
/ 27 апреля 2012

Я подозреваю, что это ошибка синхронизации. Если последовательность выглядит следующим образом, ваш CCMotionStreak всегда будет немного отключен:

  1. [streak setPosition:self.theHero.heroSprite.position] - полоса на позиции героя
  2. [CCMoveTo actionWithDuration:du ... - Герой движется
  3. Рендеринг, но герой и полоса находятся на разных позициях

когда вы перестаете двигаться, они уравниваются.

Я бы предложил обновить полосу движения в классе Героя или использовать планировщик для установки приоритета, чтобы вызов [streak setPosition происходил после обновления действия CCMoveTo для перемещения Героя.

Вероятно, у первого хода правильные приоритеты, и он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...