cocos2d像素碰撞检测



我目前正在编写一个带有多个矩形(比如30个)的游戏,如果用户单击四边中的一个,则需要采取特定的操作。问题是每张牌都有相同的一面来执行这个动作。例如,对于矩形1,将执行此操作的一侧将是左侧,而矩形3的一侧将为上侧。我的猜测是这里需要一个像素碰撞检测。你们觉得怎么样?还有没有一个使用cocos2的像素碰撞的好例子?

您可以简单地使用以下代码

if (CGRectIntersectsRect(Rect1, Rect2)) 
{
     //Your code ...                
}   

使用上述CGRectIntersectsRect可以检测矩形区域内的碰撞像素。

是的,很好,解决方案有点混乱,但它有效,这就是我所做的:我将CCSprite子类化,并创建了一个名为state的新属性,如果相对于该旋转进行旋转,则保存当前位置。根据被触摸的一侧,我会使用这些信息来确定矩形的哪一侧被触摸

if((spriteCentre1.x < spriteCentre2.x) && (xAxisDiff < yAxisDiff))  
    {
    [HelloWorldLayer whichSideTouched:sprite1 sideTouched:kStateRightPlus touchingSprite:sprite2];
}

+(int)whichSideTouched:(精灵卡*)精灵sideTouched:(int)触摸触摸精灵:(精灵卡*)精灵2{

开关(精灵状态){case kStateUpPlus:case kStateUpMinus:if(已触摸==kStateDownPlus){NSLog(@"润色");[ssprite setTop:ssprite2];retValue=kStateUpPlus;}else if(已触摸==kStateRightPlus){NSLog(@"向左触摸");[ssprite setRight:sprite2];retValue=kStateLeftPlus
}}

感谢Dhaval,这是我为任何希望做类似事情的人编写的未来参考代码,它可以进一步微调,如果我找到更准确的方法,我将相应地更新这个线程

-(void)touchWhichSide:(CCSprite *)sprite1 collidingSprite:(CCSprite *)sprite2
{
    BOOL retValue = NO;
    CGPoint spriteCentre1 = sprite1.position;
    CGPoint spriteCentre2 = sprite2.position;
    NSLog(@"X %f",spriteCentre2.x - spriteCentre1.x);
    NSLog(@"Y %f",spriteCentre1.y - spriteCentre2.y);
    float xAxisDiff = spriteCentre1.x - spriteCentre2.x;
    float yAxisDiff = spriteCentre1.y - spriteCentre2.y;
    NSLog(@"x axis %f",xAxisDiff);
    NSLog(@"y axis %f",yAxisDiff);
    if((spriteCentre1.x < spriteCentre2.x) && (xAxisDiff < yAxisDiff))  
    {
        NSLog(@"right touch");
    }
    else if((spriteCentre2.x < spriteCentre1.x) && (xAxisDiff > yAxisDiff)) 
    {
        NSLog(@"left touch");
    }
    else if((spriteCentre2.y < spriteCentre1.y) && (yAxisDiff > xAxisDiff))
    {
        NSLog(@"Bottom touch");
    }
    else if((spriteCentre1.y < spriteCentre2.y) && (yAxisDiff < xAxisDiff))
    {
        NSLog(@"Top touch");
    }
}

最新更新