В 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?