cocos2d удалить оттенок

Я пытаюсь реализовать подсветку анимации для моих спрайтов. Спрайт должен выделить данный цвет и постепенно вернуться к его исходным цветам, используя следующий код:

- (void)highlight {
    CCTintTo *tintAction = [CCTintTo actionWithDuration:0.1 red:255 green:255 blue:255];
    CCTintTo *tintBackAction = [tintAction reverse];

    CCSequence *sequence = [CCSequence actions: tintAction, tintBackAction, nil];
    [self runAction:sequence];
}

Теперь эта функция вызывает исключение, поскольку CCTintTo, похоже, не реализует "реверс", что имеет смысл. Есть ли другой способ реализовать удаление добавленного оттенка через интервал, используя CCAction?

3 ответа

  1. CCSpriteпо умолчанию цвет ccWhite, {255, 255, 255}, так что если вы хотите сделать спрайт легче, вам придется создать подкласс CCSprite/ написать шейдер, чтобы использовать аддитивную окраску.

  2. Просто подкрась обратно:

    CCColor3B oldColor = sprite.color;
    CCTintTo *tintTo = [CCTintTo actionWithDuration:t red:r green:g blue:b];
    CCTintTo *tintBack = [CCTintTo actionWithDuration:t red:oldColor.r green:oldColor.g blue:oldColor.b];
    [sprite runAction:[CCSequence actions: tintTo, tintBack, nil]];
    

Вы можете сохранить предыдущий цвет до начала оттенка, а затем просто создать CCTintTo с начальными значениями RGB.

Для Cocos2dx (C++)

ccColor3B oldColor = sprite->getColor();
        CCTintTo* action = CCTintTo::create(0.5f, 127, 255, 127);
        CCTintTo* actionReverse = CCTintTo::create(0.5f, oldColor.r, oldColor.g, oldColor.b);;
        sprite->runAction(CCSequence::create(action, actionReverse, NULL));

Работает нормально, Крейри, спасибо! Я уже дал тебе плюс:).

Другие вопросы по тегам