Не делайте этого на тайловой карте, вы кодируете собственное поведение для этого конкретного персонажа, работайте отдельно от 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
Обратите внимание на мои комментарии к коду, его можно значительно улучшить, но это должно стать основой для понимания того, что здесь происходит.
person
Joel Hernandez
schedule
09.02.2014