2017-11-09 21 views
1
にSKPhysicsBodyの幅を決定

Iセットアップするための新しいPhysicsBody次のコードを持っている:ユーザが画面に触れたとき、私は彼らが内側に触れているかどうかを判断しようとしているスウィフト

let size = CGSize(width: 100, height: 10) 

let player = SKShapeNode(rectOf: size) 
player.lineWidth = 1 

player.physicsBody = SKPhysicsBody(rectangleOf: size) 

player.physicsBody?.affectedByGravity = false 
player.physicsBody?.isDynamic = true 

を左、または右にオブジェクト:?デバッグ文、および私の実験は私に言っている何

func touchDown(atPoint pos : CGPoint) { 
    if (pos.x <= (player?.position.x)!) { 
     // left 
    } else if (pos.x >= (player?.position.x)! + (player?.frame.width)!) { 
     // right 
    } else { 

     print(player?.position.x) 
     print ((player?.position.x)! + (player?.frame.width)!) 
     print(pos.x) 
     // middle 
    } 
} 

は、プレイヤー.frame.widthは、オブジェクトの正しい幅を返していないことです。しかし、それ以上に、私はオブジェクトが途方もなくてもセンターを返すようです。オブジェクトは動いているので、以前の位置に戻っていることが問題だと思う。

私は2つの部分の質問があります:frame.widthは幅を決定する正しい方法ですか?touchesBeganイベントを使用するとこの明らかな情報の遅れを引き起こす可能性がありますか?

答えて

2

位置はanchorPoint(通常は0.5,0.5)またはスプライトの中心に依存します。

ポジションも親とは関係がありますので、正しい座標系を使用していることを確認する必要があります。プレイヤーの座標系に触れるには、touch.location(in:player)が最適です。

xを負にすると、それが残っていることがわかります。xが正のときは、正しいことが分かります。また、-width/2 < x <の幅/ 2のとき、あなたはあなたがノードの内側にいることを知っています。

+0

ありがとうございました。 –