如何检测精灵表的精灵帧的碰撞

时间:2013-05-08 05:44:29

标签: objective-c ios6 cocos2d-iphone sprite-sheet

我正在使用带有4个精灵的精灵表。并使用下面的代码添加精灵表。精灵是不同角度的棒球棒,在动画上,它们像时钟的针脚一样移动,但在逆时针方向上从大约80度到20度。

 [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"baseball.plist"];

spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"baseball.plist"];
[self addChild:spriteSheet];

background = [CCSprite spriteWithSpriteFrameName:@"bat1.png"];
background.position = ccp(220, 185);
background.tag = 10;
[self addChild:background];

bat1.png的大小为{113,135}

bat2.png的大小为{140,134}

bat3.png的大小是{158,125}

bat4.png的大小为{172,110}

下面的

是动画的代码

 NSMutableArray *walkAnimFrames = [NSMutableArray array];
 NSMutableArray *walkAnimFrames1 = [NSMutableArray array];
if(direction == 1){
    for(int i = 1; i < 5; i++) {
        [walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"bat%d.png", i]]];
    }
}
else{
    for(int i = 4; i > 0; i--) {
        [walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"bat%d.png", i]]];
    }
}

并检查下面的碰撞是代码

for (CCSprite *monster in _monsters) {
        if (CGRectIntersectsRect(background.boundingBox, monster.boundingBox)) {
(monster.contentSize.height/2));
            if (background.position.x -5 > (monster.position.x +     monster.contentSize.width/2)) {
                isCollision = 1;
                [monstersToDelete addObject:monster];
            }
        }
    }

但它始终检测到与bat1.png的碰撞。但是应该检测与精灵帧中当前精灵的碰撞。

即使精灵远离bat2.png,也会发生碰撞,因为它使用bat1的边界框来检查交叉点。 但我希望它检查当前spriteframe的矩形交点..

任何人都可以知道该怎么做?

1 个答案:

答案 0 :(得分:0)

我查看了你的代码,并了解它为什么检测与bat1.png的冲突。对于碰撞检测,您正在检查_monsters中的所有元素与背景之间的碰撞。

您已按如下方式设置背景位置:

 background.position = ccp(220, 185);

现在看,它的y坐标是185,比所有其他精灵位置都要大。这就是为什么你的球总是通过bat1.png

进行碰撞检测的原因