質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

3302閲覧

[SpriteKit]マルチタップの設定の仕方

nachizou

総合スコア15

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/09/17 09:01

スプライトキットでマルチタップの設定の仕方がわかりません。
試行錯誤して、以下をやってみたのですが、うまくいきません。

❶ GameViewController.swiftに、以下を設定
skView.multipleTouchEnabled = true

❷ GameScene.swiftの
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) に、以下のような一文を設定(あらかじめ"R"と”L”のスプライトを設定が前提)

if self.nodeAtPoint(location).name == "R" && self.nodeAtPoint(location).name == "J"{print("hit")}

どうか、設定の仕方と、反映の仕方を教えていただきたくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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/19 03:59

編集2016/10/08 16:10
renas

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nachizou

2016/09/21 15:08

ありがとうございます。早速実行してみます!
nachizou

2016/09/22 04:52 編集

すいません、
nachizou

2016/09/22 04:42

もう少し補足いたしますと、2種類の異なるスピライトを同時にタッチした時の処理を教えていただきたくお願いいたします
renas

2016/09/22 17:16

リズムゲームやもぐらたたきのような感じですね、その座標はスプライト基準で。 コードの意図を汲み取ってませんでした。わかる範囲ですが回答に追記しておきます。
nachizou

2016/09/24 10:15

ありがとうございます。トライしてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問