これは、ball()クラスの単純なゲームからのものです。このクラスは、ただひとつのボールのテクスチャを囲んでいるボールのテクスチャに置き換える、関数shieldOn()を持っています。シールド。クラスからのSpriteKit呼び出し関数
ボールがGameSceneで、次のように作成されます。ここでは
func getBall() {
let ball = Ball()
ball.createBall(parentNode: self)
}
はボールのクラスは、私が持っていない私のコード(GameScene.swift)のメインセクションで
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")
}
}
ですボールを参照してください。だから私は画面上のすべてのノードを順番に調べて、下のように一致するものをキャストしようとします。ボールにSKSpriteNode型の値をキャストできないというエラーが表示されてクラッシュします。
for node in self.children {
if node.name == "ball" {
let ball = node as! Ball
ball.shieldOn()
}
}
私は幸運のないいくつかのバリエーションを試しました。私は少なくとも正しい方向に取り組んでいますか?ありがとう!
確かに別の良い点。手助けするupvoteを持ってください。 – Siriss
これは物事を説明しますが、悲しいことに、ボール変数は1つしかなく、ボール型です。 – squarehippo10
本当の質問はボールですボールクラス、カスタムクラスをダブルチェックする必要があります – Knight0fDragon