2011-01-25 8 views
2

これは私のccTouchesMovedメソッドです。 何が間違っていますか?私はcocos2dフレームワークを使用します。マルチタッチがcocos2dで動作しない

-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

CCNode *sprite = [self getChildByTag:kTagPlayer]; 
CCNode *sprite2 = [self getChildByTag:kTagEnemy]; 

CGPoint point; 

//Собрать все касания. 
NSSet *allTouches = [event allTouches]; 

for (UITouch *touch in allTouches) 
{ 
    point = [touch locationInView:[touch view]]; 
    point = [[CCDirector sharedDirector] convertToGL:point]; 

    if (point.y > 384) 
    { 
     if (point.x > 992) 
      sprite2.position = ccp(992, size.height - 100); 
     else if (point.x < 32) 
      sprite2.position = ccp(32, size.height - 100); 
     else 
      sprite2.position = ccp(point.x, size.height - 100); 
    } 
    else 
    { 
     if (point.x > 992) 
      sprite.position = ccp(992, 100); 
     else if (point.x < 32) 
      sprite.position = ccp(32, 100); 
     else 
      sprite.position = ccp(point.x, 100); 
    } 
} 

}

+0

あなたはpoint.x> 992を使用していますか?それはむしろ大きく見え、iPadの画面でしか動作しません。それでも、それは1024の最大幅(ランドスケープモード)を考慮すると、非常に小さいタッチ領域です。 – badgerr

答えて

4

あなたのglViewで複数のタッチを有効にしましたか?デフォルトでは、glViewはアプリケーションデリゲートでインスタンス化されます。コードは以下の通りです。

[glView setMultipleTouchEnabled:YES]; 
1

デバッガはallTouchesである何と言っていますか?代わりに、次のようにビューのすべてのタッチを取得してみてください:

UITouch* touch = [touches anyObject]; 
NSSet* allTouches = [touches setByAddingObjectsFromSet:[event touchesForView:[touch view]]]; 
2

あなたはRetinaディスプレイのアプリケーションを開発している場合は、すべての座標がポイントではないピクセルであることに注意してください。したがって、960x640ピクセルの網膜ディスプレイであっても、ポイント(あなたのタッチ位置)の座標は480x320の範囲になります。

あなたは、この場合には、すべての座標の「InPixels」バージョンを使用し、ピクセルを使用する場合:それはあなたのポストに追加すべき問題がない場合は

sprite.positionInPixels = ccp(992, 100); 

何期待される成果とは何か代わりに起こる。ちょっとした文脈は長い道のりです。

関連する問題