gpt4 book ai didi

ios - 节点与子类的联系

转载 作者:行者123 更新时间:2023-11-28 09:06:28 25 4
gpt4 key购买 nike

我正在创建一个类来将我的 meteor 添加到场景中:

import SpriteKit

class Meteor: SKShapeNode {

var meteorNode : SKShapeNode?
var size : CGSize!
//Acoes
var acaoApagar = SKAction.removeFromParent()
var acaoAndar : SKAction!

//Numero Randomico
var numRandom : Int = 0
var textoStringMeteor : String!

//Colisoes
let CollisionShoot : UInt32 = 0x1 << 0
let CollisionHouse : UInt32 = 0x1 << 1
let CollisionMeteor : UInt32 = 0x1 << 2

init(size : CGSize, pontoMeteor: CGPoint, textoMeteor: String)
{
super.init()
//super.init(ellipseOfSize: <#CGSize#>)

self.size = size

self.textoStringMeteor = textoMeteor
self.acaoAndar = SKAction.moveTo(pontoMeteor, duration: 10)

criarMeteoro()
setarTexto(self.textoStringMeteor)

}

func setarTexto(numeroLabel : String) {

let numNode = SKLabelNode(fontNamed:"Chalkduster")
numNode.text = numeroLabel;
numNode.fontSize = 20;
numNode.position = CGPoint(x: 0, y: -10);
numNode.name = "textoNode"
meteorNode?.addChild(numNode)

}

func criarMeteoro() {

var randomX = CGFloat(Int(arc4random()) % Int(size.width))

//Meteor Node
meteorNode = SKShapeNode(circleOfRadius: CGFloat(20))
meteorNode!.physicsBody = SKPhysicsBody(circleOfRadius: 20)
meteorNode!.physicsBody!.dynamic = true
meteorNode!.fillColor = UIColor.blueColor()
meteorNode!.physicsBody!.categoryBitMask = CollisionMeteor
meteorNode!.physicsBody!.contactTestBitMask = CollisionShoot | CollisionHouse
meteorNode!.position = CGPoint(x: randomX, y: size.height + 900)
meteorNode!.name = "meteorNode"
self.addChild(meteorNode!)

meteorNode!.runAction(SKAction.sequence([acaoAndar, acaoApagar]))
}


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


}

我在这里调用 Meteor 类并传递所有参数:

 var meteor = Meteor(size: CGSize(width: size.width, height: size.height), pontoMeteor: ponto, textoMeteor: "30")

foreground.addChild(meteor)

最后我有我的联系人,看看节点之间是否有联系:

 func didBeginContact(contact: SKPhysicsContact) {

var bodyA = contact.bodyA!.node!
var bodyB = contact.bodyB!.node!

if bodyA.name == "tiroCanhao" && bodyB.name == "meteorNode"
{
bodyB.removeAllActions()
bodyB.removeFromParent()
bodyA.removeFromParent()
self.pointsPlayer++
self.qtdtiros += 2



}
else if bodyA.name == "meteorNode" && bodyB.name == "tiroCanhao"
{
bodyA.removeAllActions()
bodyA.removeFromParent()
bodyB.removeFromParent()
self.pointsPlayer++
self.qtdtiros += 2

}
}

现在我的问题如下:

联系后,我想在对象的 Meteor 类上调用 setarTexto 方法并更改文本,但这不起作用。我收到此错误:

Could not cast value of type 'SKShapeNode' (0x10bb5ea88) to 'MathDefense.Meteor' (0x10af6b7b0).

我正在做的是这个(在联系的 if 语句上):

let text = bodyB as! Meteor
text.setarTexto("20")

我试过了

text.textoStringMeteor = "20"

但这些都不起作用。我已经做了一些研究,但没有发现任何人遇到我的问题或试图做类似的事情。

有什么解决办法吗?

谢谢。

最佳答案

我找到了解决方案,为了修复我的错误,我做了以下操作:

删除 SKShapenode,因为该类已经是 SKShapenode(这是错误)。

然后在创建我的节点时,我用自己做了一切,而不是放入 meteor 节点。这解决了所有问题。

例子:

右:self.position = CGPoint(x: randomX, y: size.height + 900)

错误:meteorNode!.position = CGPoint(x: randomX, y: size.height + 900)

如果您使用的是 SKSpritenode,要传递纹理,只需将其放在您的 superinit 上即可。

关于ios - 节点与子类的联系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30582630/

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