【问题标题】:How to detect collision for sprite sheets' sprite frames如何检测精灵表的精灵帧的碰撞
【发布时间】:2013-05-02 06:13:12
【问题描述】:

我正在使用具有 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 的 rect 的交集..

有人知道怎么做吗?

【问题讨论】:

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


    【解决方案1】:

    我浏览了您的代码并了解了它检测与 bat1.png 碰撞的原因。对于碰撞检测,您正在检查 _monsters 中的所有元素与背景之间的碰撞。

    你已经设置了背景的位置如下:

     background.position = ccp(220, 185);
    

    现在看,它的 y 坐标是 185,比所有其他精灵的位置都要大。这就是为什么你的球总是使用 bat1.png 进行碰撞检测的原因

    【讨论】:

    • 我不这么认为。有什么方法可以检测到 bal 与精灵表中的哪个精灵发生碰撞
    • 是的,您可以通过将所有精灵添加到 NSMutableArray 然后检查怪物(在本例中为棒球)与数组中的精灵之间的碰撞来做到这一点。当检测到碰撞时,从数组的索引中可以得到发生碰撞的精灵。
    • 先生,这里我们只在使用精灵表时添加精灵。那么如何将其他精灵添加到数组中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多