gpt4 book ai didi

swift - SpriteKit 从类调用函数

转载 作者:可可西里 更新时间:2023-11-01 00:40:12 25 4
gpt4 key购买 nike

这是来自 SpriteKit 中的一个简单游戏,其中包含一个 Ball() 类,该类具有一个函数 shieldOn(),目前,它只是将单个球的纹理替换为被盾牌包围的球的纹理。

球在 GameScene 中是这样创建的:

func getBall() {
let ball = Ball()
ball.createBall(parentNode: self)
}

这是球类

class Ball: SKSpriteNode {

func createBall(parentNode: SKNode) {
let ball = SKSpriteNode(texture: SKTexture(imageNamed: "ball2"))
ball.physicsBody = SKPhysicsBody(circleOfRadius: 25)
ball.name = "ball"
parentNode.addChild(ball)
ball.size = CGSize(width: 50, height: 50)
ball.position = CGPoint(x: 20, y: 200)

launch(spriteNode: ball, parentNode: parentNode)
}


private func launch(spriteNode: SKSpriteNode, parentNode: SKNode) {
spriteNode.physicsBody?.applyImpulse(CGVector(dx: 5, dy: 0))
}

func shieldOn() {
self.texture = SKTexture(imageNamed: "ballShield")
}

func shieldOff() {
self.texture = SKTexture(imageNamed: "ball2")
}
}

在我代码的主要部分 (GameScene.swift) 中,我没有对球的引用。所以我循环浏览屏幕上的所有节点并尝试转换匹配的节点,如下所示。我崩溃并报错说它无法将类型 SKSpriteNode 的值转换为 Ball。

for node in self.children {
if node.name == "ball" {
let ball = node as! Ball
ball.shieldOn()
}
}

我尝试了一些变体,但没有成功。我至少在朝着正确的方向努力吗?谢谢!

最佳答案

根据新信息,我认为您想要这样的东西:

球类:

class Ball: SKSpriteNode{


init() {

let texture = SKTexture(imageNamed: "ball2")
let size = CGSize(width: 50, height: 50)

super.init(texture: texture, color: UIColor.clear, size: size)

self.name = "ball"
self.physicsBody = SKPhysicsBody(circleOfRadius: size.height/2)

self.physicsBody?.applyImpulse(CGVector(dx: 5, dy: 0))

}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

func shieldOn() {
self.texture = SKTexture(imageNamed: "ballShield")
}

func shieldOff() {
self.texture = SKTexture(imageNamed: "ball2")
}

}

然后用它来创建球:

func getBall() {
let ball = Ball()
ball.position = CGPoint(x: 20, y: 200)
scene?.addChild(ball)
}

关于swift - SpriteKit 从类调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45019468/

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