gpt4 book ai didi

swift - 无法寻址我的类之外的对象

转载 作者:行者123 更新时间:2023-11-30 10:08:33 25 4
gpt4 key购买 nike

我正在尝试以完全初学者的身份开发一款游戏。我设置了一个游戏场景,该场景正确引用了名为taxiNode 和BlockNode 的对象。

我现在想让事情变得互动,并想在点击 BlockNode 时在taxiNode 上添加一个脉冲。为此,我在 BlockNode 类中设置了 func interact(),但无法访问我的 TaxiNode。

这是我的 BlockNode 类代码

    import SpriteKit

class BlockNode: SKSpriteNode, CustomNodeEvents, InteractiveNode {

func didMoveToScene() {
print("block added")
userInteractionEnabled = true

}

func interact() {
taxiNode.physicsBody!.applyForce(CGVectorMake(0, 400))

}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesEnded(touches, withEvent: event)
print("destroy block")
//interact()


}

}

我的 GameScene 类看起来像这样

    import SpriteKit

struct PhysicsCategory {
static let None: UInt32 = 0
static let Taxi: UInt32 = 0b1 // 1
static let Block: UInt32 = 0b10 // 2
static let Edge: UInt32 = 0b100 // 4
/* static let Edge: UInt32 = 0b1000 // 8
static let Label: UInt32 = 0b10000 // 16
static let Spring:UInt32 = 0b100000 // 32
static let Hook: UInt32 = 0b1000000 // 64 */
}

protocol CustomNodeEvents {
func didMoveToScene()
}

protocol InteractiveNode {
func interact()
}


class GameScene: SKScene, SKPhysicsContactDelegate {

var taxiNode: TaxiNode!

override func didMoveToView(view: SKView) {
/* Setup your scene here */

// Calculate playable margin
let maxAspectRatio: CGFloat = 16.0/9.0 // iPhone 5
let maxAspectRatioHeight = size.width / maxAspectRatio
let playableMargin: CGFloat = (size.height - maxAspectRatioHeight)/2

let playableRect = CGRect(x: 0, y: playableMargin,
width: size.width, height: size.height-playableMargin*2)

physicsBody = SKPhysicsBody(edgeLoopFromRect: playableRect)
physicsWorld.contactDelegate = self
physicsBody!.categoryBitMask = PhysicsCategory.Edge

enumerateChildNodesWithName("//*", usingBlock: {node, _ in
if let customNode = node as? CustomNodeEvents {
customNode.didMoveToScene()
}
})

taxiNode = childNodeWithName("taxi") as! TaxiNode

}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

}

override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}

我的 BlockNode 类中出现以下错误

“使用未解析的标识符“taxiNode”

有人知道我需要解决什么问题才能解决出租车节点问题并让出租车接收到我的冲动吗?

最佳答案

查找变量的范围以了解更多信息。

你的区 block 节点不知道也不应该知道出租车节点是什么。

这里你需要做的是让你的 blockNode 知道出租车是什么。

为此,您必须将其传入:

首先正确建立函数:

func interact(taxiNode : TaxiNode) {
taxiNode.physicsBody!.applyForce(CGVectorMake(0, 400))

}

然后当你需要交互时:

blockNode.interact(taxiNode)

确保修复协议(protocol)来处理此问题。

protocol InteractiveNode {
func interact(taxiNode:TaxiNode)
}

关于swift - 无法寻址我的类之外的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34600596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com