Cocos2d iphone 更改动作类型后,我的动作顺序会变慢

Cocos2d iphone 更改动作类型后,我的动作顺序会变慢,cocos2d-iphone,Cocos2d Iphone,我正在创建一系列动作,以播放录制的手势。如果我只平移序列,它会全速播放。如果我只旋转,它会全速播放。如果我只缩放,它会全速播放。但是,如果我平移然后旋转,旋转将以大约一半的速度播放。如果我旋转然后平移,平移以大约一半的速度运行。这里是播放功能。RecordData只是一个包含时间、位置、旋转和缩放信息的对象 -(void) Play { int count = [m_MoveTos count]; if (count < 2) { return;

我正在创建一系列动作,以播放录制的手势。如果我只平移序列,它会全速播放。如果我只旋转,它会全速播放。如果我只缩放,它会全速播放。但是,如果我平移然后旋转,旋转将以大约一半的速度播放。如果我旋转然后平移,平移以大约一半的速度运行。这里是播放功能。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];
}
-(无效)播放
{
int count=[m_MoveTos count];
如果(计数<2)
{
返回;
}
[m_Actor stopAllActions];
[m_Actions removeAllObjects];
RecordData*start=[m_MoveTos objectAtIndex:0];
m_Actor.position=start.Pos;
m_Actor.rotation=开始.旋转;
m_Actor.scale=开始.scale;
NSLog(@“从%d个节点开始,[m_MoveTos count]);
NSLog(@“演员开始位置:%f,%f旋转:%f,比例:%f”,m_演员位置.x,m_演员位置.y,m_演员旋转,m_演员比例);
浮动时间=0;
RecordData*lastData=开始;
//跳转开始
对于(int i=1;i360度)
{
度-=360度;
}
度*=符号;
NSLog(@“旋转%f”,度);
C动作*旋转动作=[C旋转到动作持续时间:三角角:度];
[m_Actions addObject:rotAction];
延迟=错误;
}
if(rData.Scale!=lastData.Scale)
{
CCAction*scaleAction=[ccscaleToActionWithDuration:delta scale:rData.scale];
[m_Actions addObject:scaleAction];
延迟=错误;
}
如果(延迟)
{
CCActionInterval*delayTime=[CCDelayTime actionWithDuration:delta];
[m_Actions addObject:delayTime];
}
延迟=真;
lastTime=rData.Time;
}
如果([m_操作计数]<2)
{
返回;
}
CCAction*seq=[CCSequence actionsWithArray:[m_Actions getNSArray]];
[m_Actor runAction:seq];
}
有什么我遗漏的吗

谢谢,
吉姆

混合动作类型似乎是问题所在。我现在有了一个不同的位置、旋转和缩放动作序列。现在运行良好