【发布时间】:2018-07-27 06:36:34
【问题描述】:
我无法使用 SKPhysicsContactDelegate 检测到碰撞。当对象发生碰撞时,在控制台中没有打印任何内容。
我在游戏场景中有两个精灵节点
有什么办法吗?
非常感谢
class GameScene: SKScene,SKPhysicsContactDelegate {
var player :SKSpriteNode?
var block :SKSpriteNode?
override func didMove(to view: SKView) {
player = self.childNode(withName: "Player") as? SKSpriteNode
player?.name = "Player"
block = self.childNode(withName: "block") as? SKSpriteNode
block?.name = "Block"
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
player?.position.x = location.x
player?.position.y = location.y
}
}
func didBegin(_ contact: SKPhysicsContact) {
var firstbody = SKPhysicsBody()
var secondbody = SKPhysicsBody()
if contact.bodyA.node?.name == "Player"
{
firstbody = contact.bodyA
secondbody = contact.bodyB
}else {
firstbody = contact.bodyB
secondbody = contact.bodyB
}
if firstbody.node?.name == "Player" && secondbody.node?.name == "Block"
{
print("Collosion detected")
}
}
}
【问题讨论】:
-
看看你的didBegin里的else语句,告诉我哪里错了
-
我还假设您在 SKS 文件中制作物理实体?您可以从 didMove 中删除您的代码,这些都不需要(您的精灵已经具有这些名称,否则您将无法为它们分配这些名称,哈哈)。我也认为你有一个大写错误......你有“块”和“块”,swift是区分大小写的。
标签: ios swift sprite-kit gamekit