Cocos2d iphone 更改动作类型后,我的动作顺序会变慢
我正在创建一系列动作,以播放录制的手势。如果我只平移序列,它会全速播放。如果我只旋转,它会全速播放。如果我只缩放,它会全速播放。但是,如果我平移然后旋转,旋转将以大约一半的速度播放。如果我旋转然后平移,平移以大约一半的速度运行。这里是播放功能。RecordData只是一个包含时间、位置、旋转和缩放信息的对象Cocos2d iphone 更改动作类型后,我的动作顺序会变慢,cocos2d-iphone,Cocos2d Iphone,我正在创建一系列动作,以播放录制的手势。如果我只平移序列,它会全速播放。如果我只旋转,它会全速播放。如果我只缩放,它会全速播放。但是,如果我平移然后旋转,旋转将以大约一半的速度播放。如果我旋转然后平移,平移以大约一半的速度运行。这里是播放功能。RecordData只是一个包含时间、位置、旋转和缩放信息的对象 -(void) Play { int count = [m_MoveTos count]; if (count < 2) { return;
-(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];
}
有什么我遗漏的吗
谢谢,
吉姆混合动作类型似乎是问题所在。我现在有了一个不同的位置、旋转和缩放动作序列。现在运行良好