0

シーンに 20 個のスプライトがあり、以下のようにスプライトを配置しました。

       o    o    o   o   o    o    o

       o    o    o   .   o    o    o 

       o    o    o   o   o    o    o

o-->私のボールスプライト .-->私の空のスプライト

2行目の2番目のスプライトを空のスプライトに移動すると、3番目のスプライトが削除され、そこに空のスペースが追加されます。同様に、スプライトを空の位置に移動したい (水平移動、垂直移動、斜め移動) 中央のスプライトを削除したい。誰でもこれを手伝ってくれますか。よろしくお願いします。

4

1 に答える 1

0

これを試して、

.hで、グローバルスプライト変数を宣言します。

CCSprite *movingBall;

.m、init、

movingBall = nil;

touchesBegan

if(!movingBall)
{
  for(int i = 0; i<20; i++)
  {
     CCSprite *currentSprite = (CCSprite *)[self getChildByTag:i+tagOffset];

     if(CGRectIntersectsPoint([currentSprite boundingBox],touchPoint))   
     {
        // get moving sprite touched

        if(movingBall.position.x == emptySprite.position.x+(2*xDistance) || movingBall.position.x == emptySprite.position.x-(2*xDistance) || movingBall.position.y == emptySprite.position.y+(2*yDistance) || movingBall.position.y == emptySprite.position.y -(2*yDistance))
        {
          movingBall = (CCSPrite *)currentSprite;
          Break;
        }
     }
  }
}

touchesMovedで、

if(!movingBall)
{
  return;
}


movingBall.position = touchedPoint;

for(int i = 0; i<20; i++)
{
   CCSprite *currentSprite = (CCSprite *)[self getChildByTag:i+tagOffset];

   if(CGRectIntersectsRect([movingBall boundingBox],[currentSprite boundingBox]))   
   {
      // current sprite touched
      if(currentSprite.tag == emptySprite.tag)
      {
        movingBall.position = emptySprite.position;

        [self removeChild:currentSprite];
        Break;
      }

   }
}

touchesEndedでは、

  if(!movingBall)
  {
    return;
  }

  movingBall = nil;
于 2013-01-31T05:29:18.613 に答える