1

ここに画像の説明を入力

上の画像では、黄色は iPad の解像度よりも大きいスプライトを表しています。ここで白で表されている特定の場所でドラッグドロップ機能を許可したいと思います。

私が持っているものは次のとおりです: - CCActor は CCSprite を継承します -targetedBoundingBox は、スプライトによる白い円の境界ボックスです。

私が欲しいもの: 画面ではなくスプライトに従って touchLocation を取得するにはどうすればよいですか?

私のコード:

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {

    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
    CCActor * newSprite = [self selectSpriteForTouch:touchLocation];
    if(newSprite != NULL){
        //touchLocation should be according to the sprite.
        if (CGRectContainsPoint(newSprite.targetedBoundingBox, touchLocation)) {
            [self spriteSelected:newSprite];
            return YES;
        }
        return NO;
    }
    return NO;
}
4

2 に答える 2

2

これを行う最も簡単な方法は、タッチ位置とスプライトの位置の差を計算することです。したがって、コードは次のようになります。

最初にこれをクラスのどこかでグローバルに定義します

CCPoint relativePosition;

そして、タッチコードの内側から、タッチ位置とスプライトの位置の差を計算します(タッチが実際にスプライトの内側にある場合にのみ実行されます。つまり、外側に触れた場合、x=-100、y=-999 は取得されません)スプライト)

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {

    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
    CCPoint actorPosition = [actor position];

    if (CGRectContainsPoint(actor.targetedBoundingBox, touchLocation)) {
      //You now have the touch position here:
      relativePosition = ccpSub(touchLocation, actorPosition);
      return YES;
    }

    return NO;
}

コードはテストされていません。頭のてっぺんから書いただけです。間違いがあると思いますが、どちらの方向に進むべきかのヒントです!また、あなたが何をしているかにもよりますが、これを処理するためのより良い方法があります、この投稿を例に取ります

私が意味をなさない場合は、私を修正してください:)

于 2013-01-29T12:57:52.780 に答える
0

あなたの説明に基づいて、「私が欲しいもの:画面ではなくスプライトに従って touchLocation を取得するにはどうすればよいですか?」、まず、現在 Cocos2D がすべてのタッチをレイヤーのレベルで集中的に処理することを理解する必要があります。スプライトのレベルで。

したがって、UIView 座標で受け取ったタッチをレイヤー (ノード空間) 座標に変換し、タッチが関係するスプライトと交差するかどうかを確認する必要があります。リファレンス実装については、このチュートリアルを確認してください。

私があなたの質問を正しく理解していれば、さらに一歩進んで、関係するスプライトの正確な座標を特定したい場合、それは基本的な directionDistance = (newSprite.x,newSprite.y) -(touchlocation.x,touchlocation.y) です関係するスプライト内の正確なタッチ位置に到達するために、スプライトの中心からの方向および/または距離を取得するために、タッチ内でスプライト条件が交差します。

于 2013-01-29T19:30:28.290 に答える