cocos2d像素碰撞检测

时间:2012-03-25 01:52:34

标签: iphone objective-c cocos2d-iphone collision-detection sprite

我目前正在编写一个带有多个矩形(例如30个)的游戏,如果用户点击四个方面中的一个,则需要采取某些操作。麻烦是每张卡都有相同的一面将执行此操作。例如,对于矩形1,将执行此操作的一侧将是左侧,但是矩形3侧面将是顶侧。我的猜测是这里需要像素碰撞检测。你们有什么感想?还有一个关于使用cocos2s的像素碰撞的好例子吗?

3 个答案:

答案 0 :(得分:2)

您只需使用以下代码

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

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

答案 1 :(得分:0)

感谢Dhaval,这里的代码我为任何希望做类似的人写了一个未来的参考,它可以进一步微调,如果我想出一个更准确的方法这样做我将相应地更新这个线程< / p>

-(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");
    }

}

答案 2 :(得分:0)

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

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

+(int)whichSideTouched:(SpriteCard *)sprite sideTouched:(int)触摸touchSprite:(SpriteCard *)sprite2 {

switch(sprite.state){         case kStateUpPlus:         case kStateUpMinus:             if(touch == kStateDownPlus)             {                 NSLog(@“搞砸了”);                 [sprite setTop:sprite2];                 retValue = kStateUpPlus;             }             否则如果(触摸== kStateRightPlus)             {                 NSLog(@“向左触摸”);                 [sprite setRight:sprite2];                 retValue = kStateLeftPlus;
            } }