0

接触検出のために 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

entityNodephysicsBody にメンバー「 .」がないというエラーが表示されます。contactBody に関連付けられたエンティティを検索するなど、他にも多くのことを試しましたが、後続のコードがオプションを探しているという別のエラーが発生します。「if」を取り除こうとしましたが、問題を次のcontactCallBack呼び出しに移すだけです。

if let notifiableEntity = entityA as? ContactNotifiableType, otherEntity = entityB where aWantsCallback {
    contactCallback(notifiableEntity, otherEntity)
}

これを解決してcontactCallBack通話を機能させる方法はありますか?

4

2 に答える 2

-1

最近、同様の問題に遭遇しました。iOS バージョンが >= 9 であり、OSX が少なくとも 10.11 であることを確認してください。

于 2016-02-23T03:26:39.337 に答える