2013-05-08 1 views
0

Я использую лист спрайта с 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.

может любой кто-нибудь знает, как это сделать?

ответ

0

Я прошел через ваш код и получил причину, по которой он обнаруживает столкновение с bat1.png. Для обнаружения столкновений вы проверяете столкновение между всем элементом в _monsters и фоном.

И вы установили положение фона следующим образом:

background.position = ccp(220, 185); 

Теперь посмотрим, его у координируют 185, который терки, чем все остальные позиции спрайтов. Вот почему ваш мяч всегда получает обнаружение столкновения с bat1.png

+0

i dnt так считают. есть ли способ обнаружить, какой спрайт в листе спрайта встречается с балком – KsK

+0

да, вы можете это сделать, добавив весь спрайт в NSMutableArray, а затем проверите столкновение между монстром (в данном случае это бейсбол) и спрайтами в массив. когда Collision будет обнаружен, из индекса массива вы можете получить спрайт, который находится в состоянии столкновения. – Renaissance

+0

вам просто нужно изменить код обнаружения столкновения. – Renaissance