0

セルの位置をシーンの座標に変換したい。現在、セルは非表示ノードの子です。細胞がウイルスと接触すると、細胞の位置を取得します。紛らわしいことに、セルの位置は、座標がシーンに変換されるときだけでなく、その親に対する座標でも同じです。位置は (0,0.002) ですが、実際の位置は (0,50) である必要があります。

セルノードを直接参照して位置を監視すると(例childNodeWithName("cell"))、正しい位置が表示されます。私は当初、この問題はダウン キャスティングに関係していると考えていましたが、ダウン キャスティングの有無にかかわらず、位置が正しく表示されません。これはなぜですか?

func didBeginContact(contact: SKPhysicsContact) {
    let bodyA = contact.bodyA
    let bodyB = contact.bodyB

    if bodyA.categoryBitMask & PhysicsCategory.Virus != 0
        && bodyB.categoryBitMask & PhysicsCategory.Cell != 0 {

        let virus = bodyA.node as! VirusNode
        virus.attachedCell = bodyB.node as? CellNode
        print(self.convertPoint(virus.attachedCell!.position, toNode: self)) //outputs (0,0.002)
    }
}
4

1 に答える 1

0

(self) に変換する同じオブジェクト (self) で convertPoint メソッドを使用しているため、常に同じポイントが得られます。

このスニペットには多くの問題があります。たとえば、単純にウイルスの attachedCell プロパティを設定しても、ウイルスはウイルスの子ノードにはなりません。

そうしたい場合は、明示的に行う必要があります。それ以外の場合、セルは以前のノードの子のままです...

あなたはこれを求めている:

func didBeginContact(contact: SKPhysicsContact) {
    let bodyA = contact.bodyA
    let bodyB = contact.bodyB

    if bodyA.categoryBitMask & PhysicsCategory.Virus != 0
        && bodyB.categoryBitMask & PhysicsCategory.Cell != 0 {
        bodyB.node.removeFromParent()
        let virus = bodyA.node as! VirusNode
        virus.attachedCell = bodyB.node as? CellNode
        virus.addChild(bodyB.node)
        print(virus.convertPoint(virus.attachedCell!.position, toNode: self)) //should output properly
    }
}

これにより、セルの位置がウイルスの座標系からシーンの座標系に変換されます。

于 2016-05-06T16:44:12.770 に答える