Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 防止cocos2d中具有随机位置的精灵重叠_Objective C_Cocos2d Iphone - Fatal编程技术网

Objective c 防止cocos2d中具有随机位置的精灵重叠

Objective c 防止cocos2d中具有随机位置的精灵重叠,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,我在场景中生成随机精灵,随机位置如下: -(void)addWRight { int randNo = arc4random()%5; int randType = arc4random()%3; for(int i = 0; i <= randNo; i++) { NSString *strSprite = @"1.png"; if(randType == 0) { strSprite = @"1.png"; } else if(

我在场景中生成随机精灵,随机位置如下:

-(void)addWRight
{
int randNo = arc4random()%5;
int randType = arc4random()%3;

for(int i = 0; i <= randNo; i++)
{
    NSString *strSprite = @"1.png";
    if(randType == 0)
    {
        strSprite = @"1.png";
    }
    else if(randType == 1)
    {
        strSprite = @"2.png";
    }
    else
    {
        strSprite = @"3.png";
    }

    int minX = 130; 
    int maxX = 240; 
    int randX = arc4random() % (maxX - minX) + minX;

    CCSprite *spr = [CCSprite spriteWithFile:strSprite];
    spr.position = ccp(randX, 200);
    [self addChild:spr];
    [whiteArray addObject:spr];
}}
-(void)addWRight
{
int randNo=arc4random()%5;
int randType=arc4random()%3;

对于(int i=0;i我可以建议两种方法:

  • 碰撞检测:在添加新精灵之前,请检查其边界是否与任何其他现有精灵相交'
  • 为了降低检查两个边界是否冲突的复杂性,可以执行以下操作:

  • 离散化您的空间:定义一个网格;然后在此网格中为您的精灵指定随机坐标;计算整个空间中指定网格单元的坐标。例如,假设您的精灵为20x40,空间为320x480,则可以使用16x12网格;如果将精灵指定给单元(3,3),则对应于(60120)。在这种情况下,您将仅通过比较两个精灵的坐标来检测它们之间的碰撞

  • 在post中有一个由timTheMystic发布的代码片段。虽然不是一个好的解决方案,但仍然是一个可接受的解决方案,可以防止精灵之间的重叠