Разница между приостановленным свойством SKScene и SKView

Я приостанавливаю свой SKScene, используя следующий код:

self.paused = YES;

Однако, согласно этому ответу от Андрей Гордеев, также можно поставить сцену на паузу с помощью этой строки:

self.view.paused = YES;

Я хотел бы понять, какая разница, если вызвать либо (или оба), чтобы приостановить сцену.


person ZeMoon    schedule 30.04.2014    source источник


Ответы (2)


Приостановка SKView останавливает вызов метода update: для SKScene.

Приостановка SKScene этого не делает.

Обычно я ставлю на паузу и SKScene, и SKView.

ИЗМЕНИТЬ:

Начиная с iOS9 приостановки сцены будет приостановлен метод update:.

person Andrey Gordeev    schedule 30.04.2014
comment
Я подтвердил это, используя NSLog() в методе обновления. Спасибо Андрей за разъяснение. - person ZeMoon; 30.04.2014
comment
Приостановка SKScene останавливает все действия, выполняемые на узле и его дочерних элементах. Поэтому оба обычно вызываются вместе. - person jokkedk; 06.12.2014
comment
Это уже не так... В iOS9 метод update: не выполняется, пока сцена приостановлена. Вы можете внести поправку об этом для будущих читателей. Другая часть (о SKView), конечно, правильная, и я думаю, что она никогда не изменится :) - person Whirlwind; 26.03.2016
comment
@Whirlwind отредактируйте ответ! К сожалению, я сейчас не работаю с SpriteKit :) - person Andrey Gordeev; 26.03.2016
comment
Я разрабатываю игру с симуляцией гравитации, и на самом деле разница заметна. Если вы быстро приостанавливаете/возобновляете SKView, вы получаете неприятное дрожание, похожее на ошибку. Пауза/возобновление самой сцены стало намного плавнее. - person Bernardo Santana; 05.05.2016

Эффект тот же. У вас по-прежнему есть свойство paused для сцены, потому что это подкласс SKNode, и сцена может нуждаться в приостановке во время переходов либо с помощью параметра SKView, который определяет, будут ли сцены приостанавливаться во время переходов, либо вручную.

Я бы поспорил, что приостановка представления также сможет «заморозить» текущий переход, и это единственное, что вы не можете приостановить, приостановив сцену (сцены) в одиночку.

Поэтому приостановка представления может также приостановить все внутренние таймеры и вызовы отрисовки, поэтому приостановленное представление может быть лучше для экономии заряда батареи, хотя это предположение основано на том, как cocos2d обрабатывает приостановленный режиссер по сравнению с приостановленной сценой.

person LearnCocos2D    schedule 30.04.2014
comment
Эффект не тот, если вы делаете расчеты в методе update: - person Andrey Gordeev; 30.04.2014