2017-03-16 8 views
1

SKSceneで複数のタッチを有効にできないようです。スプライトキットの複数タッチを有効にする

私が試してみた:

self.view.multipleTouchEnabled = YES; 
self.inputView.multipleTouchEnabled = YES; 

それでもtouchesBegan:は、唯一のタッチを取得します。私は行方不明のトリックはありますか?

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"Touch outside loop"); 
    int i = 0; 
    for (UITouch *touch in touches) { 
    NSLog(@"Touch count inside: %i",++i); 
    } 
} 

は、これが出力されます。

これは、私はタッチをチェックしてる方法です。常に例外なく:

Touch outside loop 
Touch count inside: 1 

それから私は私がするまで、それは別のタッチを登録しませんよう、再び私の指とタッチを持ち上げる必要があります。再度取得:

Touch outside loop 
Touch count inside: 1 
+1

マルチタッチは、デフォルトで有効になっています。複数のタッチにアクセスするには、 'touchesBegan'の' touches'の要素をループします。 – 0x141E

+0

奇妙な。私はそれをやっていて、それはワンクリックを登録するだけです。私は指を持ち上げて別のタッチを得るために画面に触れなければならない。私が見ているもので私の質問を更新する。 – user3564870

+0

'[super touchesBegan ...]'と呼んでみてください。 –

答えて

1

iOSはライフサイクル全体を通じて各タッチイベントを追跡します。つまり、ユーザが画面にタッチすると、タッチオブジェクトが作成され、touchesBeganに渡されます。ユーザーの指が動くと、オブジェクトは新しいタッチ位置で更新され、touchesMovedに渡されます。ユーザの指が画面に触れなくなったら、オブジェクトはtouchesEndedに渡されます。

次は、SpriteKitでマルチタッチを実装する方法の1つです。複数のタッチが含まれるため、このコードは実際のiOSデバイスでテストする必要があります。

最初に、テスト目的でスプライトを作成してシーンに追加します。

- (void)didMoveToView:(SKView *)view {  
    for (int i=-2;i<3;i++) { 
     SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; 
     [sprite setScale:0.25]; 
     sprite.position = CGPointMake(0, i * 75); 
     [self addChild:sprite]; 
    } 
} 

次に、ドラッグされているスプライト決定し、タッチの現在位置にスプライトを移動させるタッチの以前の位置を使用します。 touchesのタッチイベントをループすることで、複数のスプライトを異なる指で同時に移動することができます。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInNode:self]; 
     CGPoint previousLocation = [touch previousLocationInNode:self]; 
     SKNode *node = [self nodeAtPoint:previousLocation]; 
     if (node != self) { 
      node.position = location; 
     } 
    } 
} 
関連する問題