接触検出のために DemoBots で使用されているアプローチを再利用しています。コードの動作と DemoBot の記述方法が異なるため、問題が発生しました。DemoBot では、コンポーネント RenderComponent に変数 ' node
'があります。
let node = EntityNode()
init(entity: GKEntity) {
node.entity = entity
}
私のコードではアニメーションを使用していないため、RenderComponent に相当するものはもう少し複雑です。変数 'node' は既に使用されており、physicsBody に関連付けられているため、新しい変数 ' entityNode
'を作成しました
let node: SKSpriteNode
let entityNode = EntityNode()
init(entity: GKEntity, nodeTemplate: SKSpriteNode) {
node = SKSpriteNode(imageNamed: "animal")
entityNode.entity = entity
}
handleContact: メソッド内で、エンティティへの参照を取得するために 2 つの解決策を試しました。オプション1:
let entityA = (contact.bodyA.node as? EntityNode)?.entity
let entityB = (contact.bodyB.node as? EntityNode)?.entity
これに対して print() チェックを実行すると、これら 2 つのエンティティに対して nil 値が返されます。entityNode
エンティティを見つけるために「 」という名前のプロパティを探す必要があるため、これは十分に論理的です。オプション 2 に変更すると、次のようになります。
let entityA = (contact.bodyA.entityNode as? EntityNode)?.entity
let entityB = (contact.bodyB.entityNode as? EntityNode)?.entity
entityNode
physicsBody にメンバー「 .」がないというエラーが表示されます。contactBody に関連付けられたエンティティを検索するなど、他にも多くのことを試しましたが、後続のコードがオプションを探しているという別のエラーが発生します。「if」を取り除こうとしましたが、問題を次のcontactCallBack
呼び出しに移すだけです。
if let notifiableEntity = entityA as? ContactNotifiableType, otherEntity = entityB where aWantsCallback {
contactCallback(notifiableEntity, otherEntity)
}
これを解決してcontactCallBack
通話を機能させる方法はありますか?