在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类的值?