2015-04-30 4 views
0

Я строю игру с помощью iOS SpriteKit. У меня есть обычный UIViewController «Chooser», который переходит во второй VC, который загружает SKScene. SKScene загружает SKSprites и перемещает их через SKAction по экрану. Когда я запускаю первый раунд, он отлично работает.SKAction не работает после перезагрузки SKScene

После завершения игры мы вернемся к Chooser, чтобы настроить следующий раунд. Я перезагружаю тот же VC с теми же SKScene. На этот раз создаются спрайты, но SKAction не запускается. Я добавил несколько операторов журналов, чтобы отслеживать их.

Вот код с SKAction:

NSInteger startZone = [TPMathUtilities randomOffscreenStartZone]; 
CGPoint startPointONE = [TPMathUtilities OFFScreenPointFinder:startZone]; 
NSInteger finishZone = [TPMathUtilities finishZoneFinder:startZone]; 
CGPoint finishPointONE = [TPMathUtilities OFFScreenPointFinder:finishZone]; 
NSLog(@"startPointONE = %f %f finishPointONE = %f %f", startPointONE.x,startPointONE.y,finishPointONE.x,finishPointONE.y); 
newTap.position = startPointONE; 

CGFloat distanceToOffScreenPt = [TPMathUtilities distanceBetweenTwoPoints:startPointONE toPoint:finishPointONE]; 
CGFloat movementDuration = distanceToOffScreenPt/[[TPGameData data] tapBaseGeneratorVelocity]; 
NSLog(@"movementDuration = %f", movementDuration); 

newTap runAction:[SKAction sequence:@[[SKAction runBlock:^{NSLog(@"starting TAP ACTIONS ");}], 
             [SKAction moveTo:finishPointONE duration:movementDuration], 
             [SKAction removeFromParent]]]]; 

Вот журнал для первого раунда, вы можете увидеть «начиная TAP АКЦИИ»

UPDATE variables: localGenMult= 0.800000 tapBaseGen= 0.800000 gameInterval= 0.511158 
startPointONE = -50.000000 740.000000 finishPointONE = 913.000000 -50.000000 
movementDuration = 4.529381 
UPDATE after Sprite Added 
starting TAP ACTIONS 

UPDATE variables: localGenMult= 0.800000 tapBaseGen= 0.800000 gameInterval= 0.512250 
startPointONE = 1064.000000 158.000000 finishPointONE = 521.000000 808.000000 
movementDuration = 3.079871 
UPDATE after Sprite Added 
starting TAP ACTIONS 

UPDATE variables: localGenMult= 0.800000 tapBaseGen= 0.800000 gameInterval= 0.561383 
startPointONE = 1064.000000 451.000000 finishPointONE = -50.000000 755.000000 
movementDuration = 4.199035 
UPDATE after Sprite Added 
starting TAP ACTIONS 

UPDATE variables: localGenMult= 0.800000 tapBaseGen= 0.800000 gameInterval= 0.507709 
startPointONE = 921.000000 808.000000 finishPointONE = -50.000000 110.000000 
movementDuration = 4.348527 
UPDATE after Sprite Added 
starting TAP ACTIONS 

Вот второй раунд с вне SKAction :

UPDATE variables: localGenMult= 0.800000 tapBaseGen= 0.800000 gameInterval= 0.813655 
startPointONE = 1064.000000 440.000000 finishPointONE = -50.000000 7.000000 
movementDuration = 4.346155 
UPDATE after Sprite Added 

UPDATE variables: localGenMult= 0.800000 tapBaseGen= 0.800000 gameInterval= 0.813989 
startPointONE = 437.000000 -50.000000 finishPointONE = 652.000000 808.000000 
movementDuration = 3.216464 
UPDATE after Sprite Added 

UPDATE variables: localGenMult= 0.800000 tapBaseGen= 0.800000 gameInterval= 0.806389 
startPointONE = 992.000000 -50.000000 finishPointONE = 856.000000 808.000000 
movementDuration = 3.158952 
UPDATE after Sprite Added 

UPDATE variables: localGenMult= 0.800000 tapBaseGen= 0.800000 gameInterval= 0.811594 
startPointONE = -50.000000 146.000000 finishPointONE = 1064.000000 746.000000 
movementDuration = 4.601108 
UPDATE after Sprite Added 

Мой код для создания SKScene остается неизменным, и приведенный выше код не изменяется. Любая догадка, почему действие не активируется на Sprite во втором раунде?

+1

Я думаю, что есть проблема с вашим переходом на SKScene, а не с вашими действиями. Вы можете попробовать протестировать его без «UIViewController» – Darvydas

+1

Каким методом является этот код? – trojanfoe

+0

@trojanfoe - пользовательский метод, используемый непосредственно перед тем, как Sprite добавляется в сцену. – Scott

ответ

0

@DFrog направил меня в правильном направлении. Проблема была в развязке. У моего приложения есть начальный VC, где игроки выбирают уровень игры. Он переходит к второму VC, содержащему SKScene. Затем он «разматывается» обратно в chooserVC в конце игры.

Я удалил все перетекает/соединения между ВК и сделал новый разматывания SEGUE следующие советы здесь: Unwind segue in a nutshell

Теперь прекрасно работает. Спасибо всем.

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