Я довольно новичок в Objective-C и Cocos2D, так что легко, я знаю, что это основной материал.Обнаружение столкновений с помощью спрайтов из массива в Cocos2D
Я использую массив для случайного размещения 4 золотых спрайтов на экране, и я использую другой спрайт (дракон), чтобы летать и собирать монеты. Очевидно, я хочу, чтобы монета исчезла, а другая - случайным образом (например, собирать яблоки в Снейке). Моя проблема в том, что я не знаю, как обратиться к отдельным спрайтам. Я добавил некоторую обработку методу обновления, но а) я не думаю, что это уместно, и б) он ничего не делает. Пожалуйста помоги. Я думаю, мне нужно использовать:
[self removeChild:sprite cleanup:YES];
Но я не уверен, как это сделать. Это, как я буду заселять экран с кольцами ::
@implementation MainScene {
CCSprite *_hero;
CCPhysicsNode *_physicsNode;
CCSprite *_goldRing;
NSMutableArray *_goldRings;
}
-(void)didLoadFromCCB {
self.userInteractionEnabled = TRUE;
_goldRing.physicsBody.collisionType = @"Level";
_goldRing.physicsBody.sensor = TRUE;
_physicsNode.collisionDelegate = self;
_hero.physicsBody.collisionType = @"hero";
CGFloat random = ((double)arc4random()/ARC4RANDOM_MAX);
_meteorites = [NSMutableArray array];
[self spawnNewGoldRing];
[self spawnNewGoldRing];
[self spawnNewGoldRing];
[self spawnNewGoldRing];
}
-(void)spawnNewGoldRing {
CGFloat randomX = ((double)arc4random()/ARC4RANDOM_MAX);
CGFloat randomY = ((double)arc4random()/ARC4RANDOM_MAX);
CGFloat rangeX = 200;
CGFloat rangeY = 300;
CCNode *goldRing = [CCBReader load:@"goldRing"];
goldRing.position = ccp(randomX * rangeX, (randomY * rangeY)+100);
[_physicsNode addChild:goldRing];
[_goldRings addObject:goldRing];
}
- (void)update:(CCTime)delta {
_hero.position = ccp(_hero.position.x, _hero.position.y);
if(_hero.position.x <= _hero.contentSize.width/2 * -1.5) {
_hero.position = ccp(_ground.contentSize.width + _hero.contentSize.width/2, _hero.position.y);
NSMutableArray *collectedGoldRings = nil;
for (CCNode *goldRing in _goldRings) {
CGPoint goldRingWorldPosition = [_physicsNode convertToWorldSpace:goldRing.position];
CGPoint goldRingScreenPosition = [self convertToNodeSpace:goldRingWorldPosition];
if (goldRingScreenPosition.x < -goldRing.contentSize.width) {
if (!collectedGoldRings) {
collectedGoldRings = [NSMutableArray array];
}
[collectedGoldRings addObject:goldRing];
}
}
for (CCNode *goldRingToRemove in collectedGoldRings) {
[goldRingToRemove removeFromParent];
[_goldRings removeObject:goldRingToRemove];
// for each removed goldRing, add a new one
[self spawnNewGoldRing];
}
}
}
было бы слишком много, чтобы спросить, как вести учет этих тоже отображающих счета?
Большое спасибо за любую помощь.
EDIT *
NSLog на массиве золотых колец
"<goldRing = 0x9b756b0 | Rect = (0.00,0.00,24.00,23.50) | tag = | atlasIndex = -1>"
)
2014-05-08 10:24:32.201 dragonCollector2[10165:60b] Gold Ring Loaded
2014-05-08 10:24:32.201 dragonCollector2[10165:60b] Array:(
"<goldRing = 0x9b77e50 | Rect = (0.00,0.00,24.00,23.50) | tag = | atlasIndex = -1>"
Мне нравится, когда это происходит, однако с использованием предлагаемого кода не обнаружено столкновения. _hero - это CCSprite, а _goldRing - CCNode, поскольку он загружается из класса goldRing. Я породил два золотых кольца и взял журнал массива, который меня смущает, поскольку их координаты кажутся локальными. Это влияет на boundingBox ?? – Dave440
Спасибо за помощь, я закончил использование метода ccPhysicsCollisionPostSolve и удалил детей по мере их столкновения, а затем повторно набрал другое кольцо. Это был неплохой документ в учебнике PeevedPenguins. Еще раз спасибо. – Dave440