Я строю игру с помощью 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 во втором раунде?
Я думаю, что есть проблема с вашим переходом на SKScene, а не с вашими действиями. Вы можете попробовать протестировать его без «UIViewController» – Darvydas
Каким методом является этот код? – trojanfoe
@trojanfoe - пользовательский метод, используемый непосредственно перед тем, как Sprite добавляется в сцену. – Scott