didBeginContact 未调用 swift3 Xcode8

Posted

技术标签:

【中文标题】didBeginContact 未调用 swift3 Xcode8【英文标题】:didBeginContact not called swift3 Xcode8 【发布时间】:2016-10-15 00:25:43 【问题描述】:

我的方法 didBeginContact 有问题。我有一个球和一面墙。 两个对象的碰撞工作正常。如果两个对象发生碰撞,它们会改变位置,但不会调用方法 didBeginContact。

// constants.swift
...

let ballCategory: UInt32 = 0x1 << 0 
let wallCategory: UInt32 = 0x1 << 1

...

// Physics balls (ball.swift)
...

init() 
  let size = CGSize(width: 32, height: 44)
  loadPhysicsBodyWithSize(size: size)


func loadPhysicsBodyWithSize(size: CGSize)
 physicsBody = SKPhysicsBody(rectangleOf: size)
 physicsBody?.categoryBitMask = ballCategory
 physicsBody?.contactTestBitMask = wallCategory
 physicsBody?.affectedByGravity = false


...

// Physics wall (wall.swift)
...

init() 
  let size = CGSize(width: 32, height: 44)
  loadPhysicsBodyWithSize(size: size)


func loadPhysicsBodyWithSize(size: CGSize)
 physicsBody = SKPhysicsBody(rectangleOf: size)
 physicsBody?.categoryBitMask = wallCategory
 physicsBody?.affectedByGravity = false


...

// GameScene (gameScene.swift)
class GameScene: SKScene, SKPhysicsContactDelegate  
...
 override func didMove(to view: SKView) 
   physicsWorld.contactDelegate = self
 
 func didBeginContact(contact: SKPhysicsContact)
  print("didBeginContact called")
 

有人知道吗?感谢您的帮助!

【问题讨论】:

【参考方案1】:

我通过改变解决了这个问题

func didBeginContact(联系人:SKPhysicsContact)

func didBegin(_contact: SKPhysicsContact)

【讨论】:

以上是关于didBeginContact 未调用 swift3 Xcode8的主要内容,如果未能解决你的问题,请参考以下文章

didBeginContact:(SKPhysicsContact *)联系人未调用

didBeginContact 委托方法未触发 ARKit 碰撞检测

同一个 SKPhysicsBody 多次调用 didBeginContact

-(void)didBeginContact 没有被调用。想法?

无法修改 didBeginContact 中的contact.bodyA

碰撞时,我的玩家以外的物理实体不会调用 didBeginContact