1.マルチタップの動作の確認
押された数を知るにはtouches.countがあります。3カ所同時タップは3となります。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?){
print( touches.count )
}
2.同時押しのノードチェック
複数カ所タッチ押下にあるスプライトノードのことで良いですか?
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
//同時タッチ数をコンソールに表示
print(touches.count)
//タッチ分繰り返す
for touch: AnyObject in touches {
let touchLocation = touch.locationInNode(self)
print(self.nodeAtPoint(touchLocation).name)
}
}
上記コードは以下のようになります。画面上をタップすると、
- 同時タッチ数とタッチ位置にあるノードの名前をコンソールに表示します。
- 同時タップ数が3の場合、ループして3つの表示をします。
- ノード名が未設定の場合nameはnilが表示されます(実行コードではエラー)、ノードも何もない場合selfを返します。
上記はfor文を使いタップ位置をすべて見ます、同時押し・スプライトの位置は固定されるなど
未知な条件が少ないようでしたらcase文なども良いと思います。
補足ですがノードの重なりも見る場合nodesAtPointを使い配列にいれます。
設定や登録といった作業が必要になるのはUITapGestureRecognizerのことかも知れません。
回答追加1
画面上のタッチ数とタッチ押下のスプライトを列挙するコードです。
swift
1 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
2
3 var nodes:[SKNode]!
4 print(touches.count)
5
6 //タッチカ所分繰り返す
7 for touch: AnyObject in touches {
8
9 let touchLocation = touch.locationInNode(self)
10
11 //タッチしたポイントにあるノードを返す
12 nodes=self.nodesAtPoint(touch.locationInNode(self))
13 //ノード数分繰り返す
14 for i in 0 ..< nodes.count {
15 if nodes[i].name != nil {
16 print[nodes[i].name)
17 print(nodes[i].position)
18 }
19 }
20}
タッチ後にタッチ座標のスプライトの有無を調べています。名前と座標を表示します。
手がかりになれば幸いです。
タッチ座標に追従した形にする場合、非表示のスプライトを用意してphysicsBodyで呼ぶなどどうでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/21 15:08
2016/09/22 04:52 編集
2016/09/22 04:42
2016/09/22 17:16
2016/09/24 10:15