2016-04-10 9 views
1

私のシーンのノードの1つに問題があるようです。Swift + SpriteKit - 表示されていなくてもボタンをクリックできます

私がボタンを持っている:

func createAttackButton() { 
    attackButton.zPosition = 1 
    attackButton.anchorPoint = CGPointZero 
    attackButton.position = CGPointMake(20, 20) 
    attackButton.size = CGSize(width: 150, height: 40) 

    addChild(attackButton) 

} 

接触が敵で作られたとき、この関数が呼び出されます。

私はtouchesBegan()FUNCを使用して、このボタンから機能を実行するには:で、しかし

attackButton.removeFromParent() 

:敵は、私は攻撃ボタンノードを削除するに破壊された後

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 

     if attackButton.containsPoint(location) { 

      print("Attack Button Clicked") 

     } 
    } 
} 

攻撃ボタンが表示された領域。削除されると、その領域はまだクリック可能です。

アイデア?

答えて

2

ノードが親に追加されているかどうかにかかわらず、containsPointメソッドは同じように動作します。つまり、与えられた点が親の(あなたの場合は、ボタンの)座標系の内側にある場合、常にtrueを返します。

attackButtonをシーンに追加せずに初期化することで確認できます。シーンの左下隅をタップすると、touchesBeganのメッセージは引き続き印刷されます。

これは、デフォルトでCGPoint(0,0)に設定されたpositionプロパティが各ノードに設定されているためです。また、あなたのケースでは、ボタンのサイズがあります。また、親として追加されていなくても(または親から削除された場合でも)、サイズと位置が設定されます。これは、プロパティとして明示的に定義されているため、強く参照されています。

+1

はい、containsPointは簡単な点を比較するためのもので、動作させるために親は必要ありません。 'ノードの境界には、その点が含まれていますか? 'は、基本的に関数が行っていることです。 positionはオプションではないので、幅と高さがゼロでなければcontainsPointを常に通過させることができますが、これが許されているかどうかはわかりません。 – Knight0fDragon

関連する問題