Моя последовательность CCActions замедляется после изменения типа действия - PullRequest
0 голосов
/ 22 июля 2011

Я создаю последовательность действий при воспроизведении записанных жестов. Если я только панорамирую последовательность, она воспроизводится на полной скорости. Если я только вращаюсь, он играет на полной скорости. Если бы я только масштабировал, он играет на полной скорости. Если, однако, я поворачиваюсь, а затем поворачиваюсь, вращение воспроизводит примерно половину скорости. Если я поверну, то панорамирование, панорамирование работает примерно на половине скорости. Вот функция воспроизведения. RecordData - это просто объект с информацией о времени, положении, повороте и масштабе.

-(void) Play
{
    int count = [m_MoveTos count];
    if (count < 2)
    {
        return;
    }

    [m_Actor stopAllActions];
    [m_Actions removeAllObjects];

    RecordData* start = [m_MoveTos objectAtIndex:0];
    m_Actor.position = start.Pos;
    m_Actor.rotation = start.Rotate;
    m_Actor.scale = start.Scale;
    NSLog(@"Starting with %d nodes.", [m_MoveTos count]);
    NSLog(@"Actor Start Position:%f, %f Rotation:%f, Scale:%f", m_Actor.position.x,     m_Actor.position.y, m_Actor.rotation, m_Actor.scale);

    float lastTime = 0;
    RecordData* lastData = start;

    //Skip start
    for(int i = 1; i < count; ++i)
    {
        bool delay = true;
        RecordData* rData = [m_MoveTos objectAtIndex:i];
        float delta = rData.Time - lastTime;

        if(rData.Pos.x != lastData.Pos.x || rData.Pos.y != lastData.Pos.y)
        {
            CCAction* moveAction = [CCMoveTo actionWithDuration:delta     position:rData.Pos];
            [m_Actions addObject:moveAction];
            delay = false;
        }

        if (rData.Rotate != lastData.Rotate)
        {
            // Put this in Record data
            float degrees = rData.Rotate;
            int sign = degrees/ABS(degrees);
            degrees = ABS(degrees);
            while (degrees > 360) 
            {
                degrees -= 360;
            }
            degrees *= sign;
            NSLog(@"Rotation %f", degrees);
            CCAction* rotAction = [CCRotateTo actionWithDuration:delta     angle:degrees];
            [m_Actions addObject:rotAction];
            delay = false;
        }

        if (rData.Scale != lastData.Scale)
        {
            CCAction* scaleAction = [CCScaleTo actionWithDuration:delta     scale:rData.Scale];
            [m_Actions addObject:scaleAction];
            delay = false;
        }

        if(delay)
        {
            CCActionInterval* delayTime = [CCDelayTime     actionWithDuration:delta];
            [m_Actions addObject:delayTime];
        }

        delay = true;
        lastTime = rData.Time;
    }

    if([m_Actions count] < 2)
    {
        return;
    }

    CCAction* seq = [CCSequence actionsWithArray:[m_Actions getNSArray]];
    [m_Actor runAction:seq];
}

Есть что-то, что я пропускаю?

Спасибо, Jim

1 Ответ

0 голосов
/ 18 августа 2011

Смешанные типы действий, кажется, проблема. Теперь у меня есть другая последовательность действий для положения, поворота и масштаба. Теперь он работает нормально.

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