0

スプライトの透明な領域へのタッチを無視する方法を見つけようとして、文字通り何週間も立ち往生しています。私はこのチュートリアルを使用してピクセルの完全な衝突を追跡しようとしました - http://www.learn-cocos2d.com/2011/12/fast-pixelperfect-collision-detection-cocos2d-code-1of2/無駄に。これは現在、私のコードがどのように見えるかです:

-(void)checkTap:(CGPoint)touch{
BOOL yesNo = NO;
if(yesNo == NO)
{
    sprTap.position = ccp(touch.x, touch.y);
}}

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSSet *allTouch = [event allTouches];
UITouch *touch = [[allTouch allObjects]objectAtIndex:0];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector]convertToGL:location];

[self checkTap:location];
touchFlag = 0;

for(int i = 0; i < [sprArray count]; i++)
{
  KKPixelMaskSprite *sprite = (KKPixelMaskSprite *)[sprArray objectAtIndex:i];
        if([sprTap intersectsNode:sprite])
        {
            selectedSprite = sprite;
            touchFlag = 1;
            break;
        }
}}

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
NSSet *allTouch = [event allTouches];
UITouch *touch = [[allTouch allObjects]objectAtIndex:0];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector]convertToGL:location];

[sprTap setPosition:location];
if(touchFlag == 1)
{
  _spriteTouch = TRUE;
  [selectedSprite setPosition:location];
}
else
{
  for(int i = 0; i < [sprArray count]; i++)
  {
      KKPixelMaskSprite *sprite = (KKPixelMaskSprite *)[sprArray objectAtIndex:i];
                if([sprTap intersectsNode:sprite])
                {
                    selectedSprite = sprite;
                    touchFlag = 1;
                    break;
                }
            }
        }
}}

これに関する問題は、sprTap のバウンディング ボックスがスプライトのバウンディング ボックスと交差すると、両方が移動し、スプライトが完全な正方形ではないため、うまくいかないことです。pixelMaskIntersectsNode も試しましたが、どちらもうまくいかないようです。スプライトの透明部分へのタッチを無視するにはどうすればよいですか? 私を助けてください。

4

1 に答える 1

1

CGMutablePathRefを使用して、透過部分を検出できます。

このスレッドで私の答えを参照してください。

CGPathの作成方法に関する情報:こちら

詳細については、ここをクリックしてください

于 2013-02-18T10:10:37.797 に答える