SKSpriteNode自定义类,并从另一个类访问变量

时间:2019-02-07 13:35:01

标签: ios swift sprite-kit swift4 skspritenode

在GameScene.sks中,我在“自定义类”选项卡中放置了“ CharacterNode”类,并创建了一个带有纹理的Color Sprite,并提供了一个名称“ hero”。

在文件“ 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语句,具体取决于在屏幕上按下了哪些按钮,字符类(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按钮。

我知道是否在GameScene.swift中创建了Character类的实例,该实例是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)

如何从GameScene.swift中检索PlayerControlComponent中使用的CharacterNode类的值?

0 个答案:

没有答案