2015-03-10 3 views
1

Я пытаюсь создать массив SKActions в Spritekit с использованием объектива-c, чтобы два массива выполнялись параллельно. «ротация» - это не массив, который подходит мне, если только он не вызывает проблему, в которой я сомневаюсь, проблема здесь. То, что я ожидаю от этого кода, состоит в том, что actionMove и rotation будут работать параллельно, а затем он переходит к actionMove1 и actionMove2 и заканчивает runAction. Я получаю следующую ошибку в последней строке кода, показанной ниже (добавлена ​​только часть необходимого кода).Как создать массив SKActions в Spritekit

Коллекция элементов типа 'SKAction * __ сильный [3] не является объектом Objective-C

SKAction * actionMove = [SKAction moveTo:CGPointMake(actualX2, actualY2) duration:actualDuration]; 
SKAction * actionMove1 = [SKAction moveTo:CGPointMake(actualX3, actualY3) duration:actualDuration]; 
SKAction * actionMove2 = [SKAction moveTo:CGPointMake(actualX4, actualY4) duration:actualDuration]; 
int rotate = arc4random() % 5; 
SKAction * rotation = [SKAction rotateByAngle:M_PI/rotate duration:0.5]; 

SKAction * moveArray[] = {actionMove, actionMove1, actionMove2}; 

[game_piece1 runAction:[SKAction group:@[moveArray, rotation]]]; 

ответ

1

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

SKAction * actionMove = [SKAction moveTo:CGPointMake(actualX2, actualY2) duration:actualDuration]; 
SKAction * actionMove1 = [SKAction moveTo:CGPointMake(actualX3, actualY3) duration:actualDuration]; 
SKAction * actionMove2 = [SKAction moveTo:CGPointMake(actualX4, actualY4) duration:actualDuration]; 
int rotate = arc4random() % 5; 
SKAction * rotation = [SKAction rotateByAngle:M_PI/rotate duration:0.5]; 

SKAction *firstStep = [SKAction group:@[actionMove, rotation]]; 
SKAction *sequence = [SKAction sequence:@[firstStep, actionMove1, actionMove2]]; 

[game_piece1 runAction:sequence]; 

Вы можете найти эту ссылку полезно Adding Actions to Nodes Это делает хорошую работу показа различных групп и последовательностей.

Надеюсь, это даст вам желаемый результат.

Редактировать

Если вы хотите, чтобы запустить вращение во время выполнения действий двигаться в Одере это будет выглядеть так.

SKAction * actionMove = [SKAction moveTo:CGPointMake(actualX2, actualY2) duration:actualDuration]; 
SKAction * actionMove1 = [SKAction moveTo:CGPointMake(actualX3, actualY3) duration:actualDuration]; 
SKAction * actionMove2 = [SKAction moveTo:CGPointMake(actualX4, actualY4) duration:actualDuration]; 
int rotate = arc4random() % 5; 
SKAction * rotation = [SKAction rotateByAngle:M_PI/rotate duration:0.5]; 

SKAction *sequence = [SKAction sequence:@[actionMove, actionMove1, actionMove2]]; 
SKAction *group = [SKAction group:@[sequence, rotation]]; 

[game_piece1 runAction:group]; 
+0

@SkylarLauren Извиняюсь за недоразумение. Мой план состоит в том, чтобы фактически иметь массив из трех поворотов. Таким образом, будут два массива, три actionMoves и три вращения, идущие параллельно. Вот почему я использую группу: @, а не последовательность: @ – Ino

+0

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

Смежные вопросы