Пользовательский класс SKSpriteNode и доступ к переменным из другого класса - PullRequest
0 голосов
/ 07 февраля 2019

В GameScene.sks я создал Color Sprite с текстурой и предоставил имя «герой», на вкладке «Пользовательский класс» я поместил класс «CharacterNode».

В файле «CharacterNode.swift»”(Класс Character), я просто храню свойства BOOL, относящиеся к герою (например, walkLeft, walkRight, actionEnabled ..).Класс определяется как:

class CharacterNode: SKSpriteNode {
  var left = false
  var right = false
  var actionEnabled = false
//
}

В файле «PlayerControlComponent.swift»:

class PlayerControlComponent: GKComponent, ControlInputDelegate {
  var cNode: CharacterNode?
//
}

Я создаю экземпляр класса Character.

ВнутриФайл PlayerControlComponent У меня есть оператор switch, в зависимости от того, какие кнопки нажимаются на экране, флаги в классе Character (cNode) «walkLeft», «walkRight», «actionEnabled» .. устанавливаются в true, например «cNode? .WalkLeft =true ”

   func follow(command: String?) {

    if (cNode != nil){
      switch(command!){
      case "circle":
        print("PlayerControlComponenet circle pressed")
        cNode?.actionEnabled = true
      case "cancel circle","stop circle":
        cNode?.actionEnabled = false
        print("PlayerControlComponenet circle unpressed")

      case("left"):
        cNode?.left = true
      case "cancel left","stop left":
        cNode?.left = false

Когда кнопки отпущены, для флага / с устанавливается значение false.Движение все работает нормально, у меня проблема с кнопкой actionEnabled.

Вернувшись в файл GameScene.swift, я хочу иметь возможность узнать, какой флаг actionEnabled в настоящее время установлен (например, true или false).Причина в том, что этот файл также является SKPhysicsContactDelegate, и мне нужно знать, находится ли герой рядом с определенным объектом (что у меня хорошо работает), И в данный момент нажата кнопка actionEnabled.

Я знаю, еслиЯ создаю экземпляр класса Character в GameScene.swift, который является отдельным экземпляром для использования PlayerControlComponent, поэтому обновления флага не будут доступны.

В GameScene я также попытался:

var playCC = PlayerControlComponent()

Затем в качестве теста:

override func update(_ currentTime: TimeInterval) {
  let latestAction = playCC.cNode?.actionEnabled
  print("action is: \(String(describing: latestAction))")

Выходные данные показывают «action is: nil» несколько раз (я ожидал, что он покажет false, затем true, когда я нажму кнопку действия)

Как получить значения класса CharacterNode, используемого в PlayerControlComponent, из GameScene.swift?

...