Как показать ярлыки на сцене только один раз в игре спрайт-кит - PullRequest
0 голосов
/ 14 января 2019

Я уверен, что это должно быть очень легко реализовать, но, несмотря на то, что я делал это по-разному, я не смог реализовать его в своей игре. Моя игра состоит из разных сцен. Сцена 1 - это то, что я хочу, чтобы мой пользователь посещал только дважды, один раз, когда он открывает игру в первый раз и нажимает кнопку play, чтобы перейти к следующей сцене (сцена 2), которая в основном представляет собой карту и показывает количество различных видов деятельности. Сцена 1 посещается только во второй раз, только когда пользователь завершил все действия, показанные на карте на сцене 2. Каждое действие, если нажать на сцену 2, приводит к другой сцене, то есть сцене 3,4,5,6, но возвращает пользователя к сцена 2, когда он завершает определенное действие или не может это сделать.

Теперь проблема, с которой я сталкиваюсь, заключается в моей сцене 2, на которой показана карта, на которой пользователю также предлагается при его первом посещении сцены некоторые приветственные ярлыки, описывающие игру, которые нужно показывать только один раз. Когда пользователь возвращается на сцену 2 (сцена карты) после завершения / неудачного выполнения действия на другой сцене, ему не следует снова показывать ярлыки, так как они должны были сообщить ему об игре только в первый раз. Я попытался использовать логические переменные, чтобы позаботиться об этом, но у меня ничего не получается, потому что я считаю, что логические переменные, используемые для отслеживания «посетитель уже посетил сцену», не должны сохраняться в свойстве userdata узлов, как кажется, каждый раз, когда пользователь возвращается к scene 2. логическая переменная, сохраненная в пользовательских данных для конкретной метки, просто сбрасывается к значению по умолчанию и не указывает, что пользователь был на сцене раньше.

Это довольно сложно, но я уверен, что решение было бы простым по какой-то причине, чтобы не получить мою голову.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете обойти проблему, присвоив вашей сцене имя и отметив ее viewDidLoad.

После того, как пользователь выиграл / проиграл в сцене 3, вы создаете сцену 2. Дайте этой сцене имя, например scene.name = "scene_failed", а затем представьте его пользователю.

let transition = SKTransition.flipVertical(withDuration: 1.0)
let next_scene = Scene_Two()
next_scene?.name = "scene_failed"
self.view?.presentScene(next_scene!, transition: transition)

Таким образом, когда вызывается функция viewDidLoad из сцены 2, она вызывает if.

if scene?.name == "scene_failed"
{
     // redirected from scene 2
     hide_labels()
}
else
{
     // the scene has no name. so for sure it came from scene 1
     show_labels()
}

Давая вам имена сцен, вы всегда можете узнать, с какой сцены вы перешли.

0 голосов
/ 14 января 2019

Идеальный способ - отделить ваши сцены от модели данных.

Второй способ - использовать глобальные настройки для замены состояний, хранящихся в узле сцены.

Каждый раз, когда сцена появляется снова, все узлы перезагружаются по умолчанию. Таким образом, информация, хранящаяся в узле, относится только к сцене, но к модели игровых данных.

Вы находитесь на пути к захватывающему дизайну игрового программирования. Веселитесь.

...