使特定坐标中的随机精灵做一些事情

时间:2010-12-09 10:52:58

标签: iphone cocos2d-iphone

我想知道是否有人可以帮助我完成我的课程, 我把我的精灵随机分成了一组特定的坐标。 我想要一个在那个特定坐标上的精灵,能够让他们在这个随机坐标时做点什么。我遇到的问题是我必须列出if语句的长列表,如果这个精灵在这里这样做,如果另一个精灵在这里做同样的事情。

if(red1.position.y> = 0&& red1.position.y< = 63){   id r1animation = [CCMoveTo actionWithDuration:0.2 position:ccp(red1.position.x,33)];   [red1 runAction:r1animation];  }  if(red2.position.y> = 0&& red2.position.y< = 63){   id r2animation = [CCMoveTo actionWithDuration:0.2 position:ccp(red2.position.x,33)];   [red2 runAction:r2animation];  } 我希望能够说出任何精灵是否在那个精确的坐标上然后用尽可能少的代码将它们移动到一个点。所以基本上把精灵分组或我不确定的东西。

由于

2 个答案:

答案 0 :(得分:0)

  

我希望能够说出任何精灵是否在那个精确的坐标上,然后将它们移动到一个点

首先,以编程方式指定“热点”:

CGPoint hotspot = ccp(32,32); // convenience macro, 
                              //creates a CGPoint with x = 32, y = 32

创建它们时,你应该在数组中存储对所有sprite的引用(你也可以使用cocos2d的'tagging',但为了简单起见,我通常喜欢使用数组)

-(void)init {
 //.. misc
 // creating sprite returns a reference so keep it in an array
 CCSprite* curSprite = [CCSprite spriteWithFile: //...etc]
 [self.spriteArray addObject: curSprite];
 // add all sprite references to your array
}

现在你可以迭代这个数组,看看是否有任何sprite的帧与热点重叠:

-(BOOL) checkAllSpritesForCollision
{
  for (CCSprite *sp in self.spriteArray)
  {
    CGRect spriteRect = sp.frame;
    if (CGRectContainsPoint(spriteRect,hotspot))
    {
       // run your action on sp...
    }
  }

  // you might like to return YES if a collision happened?
}

这是一种检查每个精灵帧是否包含给定点的强力方法。当然,有很多方法可以让这只猫受到伤害,但希望这会让你走上更好的道路。

答案 1 :(得分:0)

你可以做的是计算距离:

    float pointX = thePoint.position.x;
float pointY = thePoint.position.y;

float pointDeltax = sprite.position.x-pointX;
float pointDeltay = sprite.position.y-pointY;
float pointDist = sqrt(pointDeltax*pointDeltax+pointDeltay*pointDeltay);

但也许davbryns解决方案更适合您的目的。