0

ドラッグ可能なオブジェクトが1つあるアプリケーションを開発しています。ユーザーは、このオブジェクトをパスの外側ではなく、指定されたパスにドラッグできます。これを実現するには、境界条件を設定して、タッチポイントがそれを超えた場合にオブジェクトが移動しないようにする必要がありました。

私の問題は、私のオブジェクトサイズが30*30と言うことです。ここで、髪の毛の部分からオブジェクトに触れてから下にドラッグすると、1つの値が得られますが、同じオブジェクトを下の位置に触れた場合は、あごと言って、オブジェクトを同じ位置に移動します。前のものを移動しました。この場合、視点が前のものとは異なります。したがって、境界条件を設定する必要があるのか​​理解できません。最初の値の条件を設定すると、彼の場合は2番目のタッチプロセスが移動できなくなります。これは間違っており、2番目のケースの値を設定すると最初のケースのオブジェクトも境界の下に移動できます。私はcocos2Dを使用していません。これは単純なiPadアプリケーションです。 ここに画像の説明を入力してください

理解を深めるために、左側の緑色の円をタッチして右に移動すると、最後の値は760のようになりますが、右側をタッチして右に移動すると、最後のポイントは次のようになります。 780何か。オブジェクトを垂直方向にドラッグした場合も同じことが起こります。

私の基本的な要件は、オブジェクトが画像に示されているパスの外側ではなく、内側にのみ移動することです。

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    // Retrieve the touch point
    CGPoint pt = [[touches anyObject] locationInView:gamePice];
   startLocation = pt;
}

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

 CGPoint pt1 = [[touches anyObject] locationInView:gamePice];
 CGPoint pt = [[touches anyObject] locationInView:self.view];
   NSLog(@"moved=%f|%f",pt.x,pt.y); 

   if (pt.x>=306 && pt.y>=148 && pt.x<=720 && pt.y<=175) {  //these conditions how to set
        CGRect frame = [gamePice frame];
        frame.origin.x += pt1.x - startLocation.x;
        frame.origin.y += pt1.y - startLocation.y;
        [gamePice setFrame:frame];        
    }
}

この機能を実装する方法、またはどのようなアプローチに従うべきかを提案してください。

4

1 に答える 1

0

外側のCGRectを作成します。たとえば、CGRectMake(306、148,400,100)を作成します。これは、パスrectです。多くの場合、そのために複数のrectが必要ですが、今のところは1つから始めます。

gamePiceの新しいフレームを作成します。これは、タッチ位置に応じたフレームになります。たとえば、次のように作成します。

    CGRect frame = [gamePice frame];
    frame.origin.x += pt1.x - startLocation.x;
    frame.origin.y += pt1.y - startLocation.y;

その後、あなたの状態は、

 if (CGRectContainsRect(outerRect, frame) ) 
 {  
       [gamePice setFrame:frame];
 }

// else dont move...
于 2012-05-29T07:50:40.850 に答える