Я добавляю врага вот так:
-(void)addEnemy {
if ([spawnedEnemies count] < 25) {
CCSprite* sprite = [CCSprite spriteWithFile:@"white.png"];
float randomX = arc4random() % 480;
float randomY = arc4random() % 320;
sprite.position = ccp(randomX,randomY);
[spawnedEnemies addObject:sprite];
[self addChild:sprite];
[sprite runAction:[CCMoveTo actionWithDuration:5 position:player.position]];
} }
но если мой игрок перемещается, спрайт все еще перемещается в последнюю позицию игрока ...
из-за этого я попробовал это в своем тике:
- (void) галочка: (ccTime) дельта {
for (CCSprite *sp in spawnedEnemies) {
[sp stopAllActions];
[sp runAction:[CCMoveTo actionWithDuration:5
позиция: player.position]];
}}
но враги будут двигаться, только если я перестану двигаться (там просто движется reallllllllyyyyyyyyy slow, потому что каждый раз, когда я двигаюсь, он вызывает [sp stopAllActions]
Что мне теперь делать?
EDIT: * EDIT: * EDIT: * EDIT: * EDIT: * EDIT: * EDIT: * EDIT: * EDIT:
Теперь я делаю это, и враги движутся к игроку, даже если игрок движется
но есть проблема: чем ближе враг (к игроку), тем медленнее они двигаются ...
Как это решить?
//function to apply a velocity to a position with delta
static CGPoint applyVelocity(CGPoint velocity, CGPoint position, float delta){
return CGPointMake(position.x + velocity.x * delta, position.y + velocity.y * delta);
}
-(void)tick:(ccTime)delta {
for (CCSprite *sp in spawnedEnemies) {
CGPoint m = ccpSub(player.position, sp.position);
sp.position = applyVelocity(m, sp.position, 1.0/60.0f);
}
}