Не забирайте его на 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
Обратите внимание мои комментарии к коду, он может быть улучшен в огромных путях, но это должно быть ваша база, чтобы понять, что это здесь.
Если я использую простой метод координат в новом классе «sensorSprite», могу ли я использовать тот же код сверху, а затем просто добавить что-то к методу обновления? – user3288650
@ user3288650 Обновлено сообщение, добавлен образец кода. –