获取 class 谁在 didBegin 中扩展了 SKSpriteNode
Get class who extends SKSpriteNode in didBegin
我有一个名为 Ball 的 class 扩展了 SKSpriteNode class:
import SpriteKit
class Ball: SKSpriteNode {
var score: Int = 0
init([...]){
[...]
}
func setScore(score: Int){
self.score = score;
}
}
在我的 GameScene 中,我检测到元素上的碰撞:
func didBegin(_ contact: SKPhysicsContact) {
[...]
// Here I want to call my function in Ball class, but I can't.
contact.bodyA.node!.setPoints(2);
[...]
}
如何从 contact 变量调用 didBegin() 中的 setScore()?
谢谢
尝试将 body.node 转换为您的自定义类型。
func didBegin(_ contact: SKPhysicsContact) {
[...]
// Try to convert body.node to your custom type
guard let ball = contact.bodyA.node as? Ball else { return }
ball.setPoints(2);
[...]
}
你知道 didBegin 方法可以为同一次碰撞调用两次(这称为幽灵碰撞)吗?
您需要将联系人的 SKNode 转换为您的自定义 Ball。
也不能保证 bodyA 将是您的 Ball 节点,因此您需要兼顾接触 bodyA 和 bodyB。
if let ballNode = contact.bodyA.node as? Ball ?? contact.bodyB.node as? Ball {
ballNode.setPoints(2)
}
我有一个名为 Ball 的 class 扩展了 SKSpriteNode class:
import SpriteKit
class Ball: SKSpriteNode {
var score: Int = 0
init([...]){
[...]
}
func setScore(score: Int){
self.score = score;
}
}
在我的 GameScene 中,我检测到元素上的碰撞:
func didBegin(_ contact: SKPhysicsContact) {
[...]
// Here I want to call my function in Ball class, but I can't.
contact.bodyA.node!.setPoints(2);
[...]
}
如何从 contact 变量调用 didBegin() 中的 setScore()?
谢谢
尝试将 body.node 转换为您的自定义类型。
func didBegin(_ contact: SKPhysicsContact) {
[...]
// Try to convert body.node to your custom type
guard let ball = contact.bodyA.node as? Ball else { return }
ball.setPoints(2);
[...]
}
你知道 didBegin 方法可以为同一次碰撞调用两次(这称为幽灵碰撞)吗?
您需要将联系人的 SKNode 转换为您的自定义 Ball。 也不能保证 bodyA 将是您的 Ball 节点,因此您需要兼顾接触 bodyA 和 bodyB。
if let ballNode = contact.bodyA.node as? Ball ?? contact.bodyB.node as? Ball {
ballNode.setPoints(2)
}