如何根据移动改变精灵位置?

时间:2013-01-31 05:01:23

标签: objective-c xcode cocoa-touch cocos2d-iphone

我在我的场景中有20个精灵,我安排了我的精灵,如下所示。

       o    o    o   o   o    o    o

       o    o    o   .   o    o    o 

       o    o    o   o   o    o    o

o - >我的球精灵   .-->我的空精灵

当我将第二行中的第二个精灵移动到空精灵时,我的第三个精灵想要移除并且应该在那里添加空白空间。 同样明智地我想将任何精灵移动到空位置(水平移动,垂直移动,对角线移动),中间精灵想要移除。 任何人都可以帮助我。谢谢你提前。

1 个答案:

答案 0 :(得分: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;