- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在尝试向我的 GameScene 添加联系人委托(delegate):
self.physicsWorld.contactDelegate = ContactManager()
但是,我通过将联系人委托(delegate)(ContactManager 类)放在单独的类中来执行此操作,以避免在我的 GameScene 上有那么多代码。这是我的联系人代表:
class ContactManager : NSObject, SKPhysicsContactDelegate {
func didBegin(_ contact: SKPhysicsContact) {
print("they touched!")
}
}
问题在于,当对象 1 与对象 2 发生碰撞时,它不会运行 didBegin() 方法。但是,我知道问题不在于位掩码,因为我让 GameScene 继承了 SKPhysicsContactDelete 并将委托(delegate)设置为 self 并且方法 didBegin() 起作用了。所以问题是类 ContactManager() 没有正确链接,我如何确保 GameScene 中单独类上的联系人管理器正常工作?
最佳答案
SKPhysicsWorld 上的
contactDelegate
是unowned(unsafe)
,这意味着它不会增加保留计数器,也不会被视为可选。
这意味着您有责任保留放入此变量中的任何对象。
在您的代码中 self.physicsWorld.contactDelegate = ContactManager()
您将联系人委托(delegate)设置为 ContactManager 的本地副本。由于没有任何东西保留它,它将立即被丢弃,因为保留计数设置为 0。
这就是为什么在大多数情况下,人们使用 self
作为委托(delegate)的原因,因为你可以保证 self
存在。
要补救这种情况,请确保您有一个保留您的 ContactManger 的属性,这样您就不会在创建时丢失它。
class Example : SKScene
{
let contactManager = ContactManager()
func someKindOfSetup()
{
self.physicsWorld.contactDelegate = contactManager
}
}
来源: https://developer.apple.com/reference/spritekit/skphysicsworld/1449602-contactdelegate
关于swift - 为什么不调用单独类上的 SKPhysicsContactDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41961326/
我正在尝试使用 Spritekit 在 Swift 中编写游戏。目的是带着他的角色迎面而来的矩形逃跑。现在我在 SKPhysicsContactDelegate (didBegin ()) 方法中犯了
我想知道如何让联系人代理工作。我确实有接触,但我希望个别砖 block 在被球击中时消失。 我已经用这个碰壁太久了。一个接一个的教程似乎对我毫无帮助。我可能需要采取一些小步骤,但我不确定如何开始。 我
我有以下代码: 在我的场景中: static const uint32_t enermyCategory = 0x1 << 0; static const uint32_t fatherCat
我一直在尝试向我的 GameScene 添加联系人委托(delegate): self.physicsWorld.contactDelegate = ContactManager() 但是,我通过将联
我可以模拟 SKPhysicsContact 对象以输入到 -(void)didEndContact:(SKPhysicsContact *)contact 方法吗?或者还有其他可以在这里利用的技术吗
我的 Sprite 应该相互接触并打印到控制台,但是,一个 Sprite 走到另一个 Sprite 后面,并且它们实际上并没有接触。不用说,没有任何内容被打印到控制台。 我尝试在函数中使用许多不同“类
我正在尝试使用 Spritekit 在 Swift 中编写游戏。目的是带着他的角色迎面而来的矩形逃跑。现在我在 SKPhysicsContactDelegate (didBegin ()) 方法中犯了
在我的 .h 文件中,我添加了委托(delegate): @interface GameScene : SKScene 在我的 .m 文件中有这个 -(void)didMoveToView:(SKVi
我正在尝试解决 SKPhysicsContactDelegate 碰撞检测中遇到的问题。我有两个节点,nodeA 和nodeB,nodeA 在屏幕上固定,而nodeB 可以由用户手指在屏幕上拖动。 N
我正在尝试自己制作 flappy bird。一切正常,但现在我已经添加了 CategoryBitMasks 和所有这些东西,每次我尝试添加这段代码时: self.physicsworld.contac
我是一名优秀的程序员,十分优秀!