2014-02-09 2 views
0

Я новичок в cocos2d и кодировании, и я уверен, что этот вопрос задавали много раз, но я хочу оживить призрак в tilemap, чтобы подняться примерно на 150 пикселей, когда игрок следующий к нему. У меня естьКак анимировать tilemap

`CCSprite* sprite1 = [CCSprite spriteWithFile:@"enemy.png"]; 
    sprite1.position = ccp(464, 80); 
    [self addChild:sprite1]; 
    [sprite1 runAction:[CCSequence actions: 
         [CCMoveBy actionWithDuration:1 position:ccp(0, 150)], 
         [CCMoveBy actionWithDuration:1 position:ccp(0, -200)], nil]];` 

, который оживляет спрайт, но он остается на карте. Если я добавлю его в tilemap, он будет отображаться только тогда, когда игрок близок. Но я не совсем уверен, как это сделать. Заранее спасибо

ответ

0

Не забирайте его на tilemap, тогда вы кодируете настраиваемое поведение для этого конкретного персонажа, работайте с ним отдельно от TileMap. Вам придется работать с датчиками, если вы планируете получать эффективный код, возможно, Box2D или встроенный движок Chipmunk, который недавно полностью интегрировал CocosV3 или «легкий» выход из этого, если вы не планируете создавая скользящий сценарий, вы можете работать с простыми координатами и прослушивателем событий по методу обновления, поэтому, когда «символ» достигает точки, в которой вы хотите, чтобы появился призрак, тогда вы можете сделать этот метод.

Оберните индивидуальное поведение в классе, который вы можете повторно использовать, возможно, класс с именем sensorSprite, как только вы кодируете поведение по умолчанию для класса, вы можете создавать методы для создания объекта с определенными координатами для создания датчика вокруг, или некоторые другие интересные вещи.

Вот что может выглядеть ваш класс.

Заголовочный файл

@interface SensorSprite : CCSprite { 
    kCharacterState currentState; 
} 


-(id)initWithSpriteFrame:(CCSpriteFrame *)spriteFrame inCoordinates:(CGPoint)spawnLocation withParent:(id)theParent; 


-(void)updateSensorSpriteWithCharacters:(NSMutableArray*)charactersArray; 

@end 

Файл Реализация

typedef enum { 
    kCharacterStateAlive, 
    kCharacterStateDead, 
    kCharacterStateAppearing, 
    kCharacterStateDissapearing 

}kCharacterState; 


#import "SensorSprite.h" 

@implementation SensorSprite 

-(id)initWithSpriteFrame:(CCSpriteFrame *)spriteFrame inCoordinates:(CGPoint)spawnLocation withParent:(id)theParent{ 
    self = [CCSprite spriteWithImageNamed:@"enemy.png"]; 
    self.position = ccp(464, 80); 
    [theParent addChild:self]; 
    return self; 

} 


-(void)updateSensorSpriteWithCharacters:(NSMutableArray *)charactersArray { 

    //If you're planning on having different characters to update your state from then you should use tags. 

    for (int i=0; i<=charactersArray.count-1; i++) { 
     CCSprite *characterInArray = [charactersArray objectAtIndex:i]; 
     if (CGRectIntersectsRect([characterInArray boundingBox], [self boundingBox])) { 
      //What happens when the CG Rects from this class and another one intersects. 
      //For making reactive to encountering different sprites, you should use tags , and on each cycle detect what sprite is the one colliding by looking at it's tag. 


     } 
    } 

} 


-(void)changeStateTo:(kCharacterState)theState { 
    if (currentState==theState) { 
     //It's the same state. 
     return; 
    } 

    switch (theState) { 
     case kCharacterStateAlive: 
      //What happens when character state alive. 
      break; 
     case kCharacterStateDead: 
      //What happens when character state dead 
      break; 
     case kCharacterStateAppearing: 
      //What happens when character state reapearing 
      break; 
     case kCharacterStateDissapearing: 
      //What happens when character state dissapearing. 

     default: 
      break; 
    } 

    //After doing the required we set our current state to the changed state. 
    currentState = theState; 
} 

@end 

Обратите внимание мои комментарии к коду, он может быть улучшен в огромных путях, но это должно быть ваша база, чтобы понять, что это здесь.

+0

Если я использую простой метод координат в новом классе «sensorSprite», могу ли я использовать тот же код сверху, а затем просто добавить что-то к методу обновления? – user3288650

+0

@ user3288650 Обновлено сообщение, добавлен образец кода. –