如何让敌人迫害英雄精灵套装

时间:2014-03-16 20:07:18

标签: ios7 sprite-kit

我正在开发一款游戏精灵套件。我让玩家在场景中移动,敌人在屏幕周围随机产生。问题是我不能迫害敌人给玩家精灵。 我打算实现一个观察者模式,以便敌人随时知道玩家精灵的位置,但我没有成功。 我也考虑过实现一个委托,但仍然没有成功。 知道任何方式得到它吗? 非常感谢你

此代码显示我的场景。我的玩家移动CoreMotion并出现敌人。 我不知道如何让敌人追逐玩家。 plis帮助我。 非常感谢你

@implementation PRMyScene

-(id)initWithSize:(CGSize)size {

    if (self = [super initWithSize:size]) {

    _jugador = [SKSpriteNode spriteNodeWithImageNamed:@"Player.png"];
    _jugador.position = CGPointMake(100.0, 100.0);
    [self addChild: _jugador];

    _enemigo =  [SKSpriteNode spriteNodeWithImageNamed:@"Cannon.png"];
    _enemigo.position = CGPointMake(200.0, 120.0);
    [self addChild:_enemigo];

    _motionManager = [CMMotionManager new];
    _motionManager.deviceMotionUpdateInterval = 1.0 / 60.0;
    [self starMonitorizacionAceleracion];

     _winSize = CGSizeMake(self.size.width, self.size.height);

    }
    return self;
}


-(void)didBeginContact:(SKPhysicsContact *)contact{
      NSLog(@"contacto!!!!!!");
}

-(void)starMonitorizacionAceleracion{
    if (_motionManager.deviceMotionAvailable) {
        [_motionManager startDeviceMotionUpdates];
        NSLog(@"Actualizaciones del acelerometro ON ...");
    }
}

// this methoss only is for new CGPoint to move player in the update
-(CGPoint)actualizaMovimiento{

    CMDeviceMotion * motionData = _motionManager.deviceMotion;
    CMAcceleration gravedad = motionData.gravity;

    CGPoint pos =_jugador.position;
    pos.x -= gravedad.y * KRapidezdeMvimiento;
    pos.y += gravedad.x * KRapidezdeMvimiento;

    //prevenir que el jugador se salga de la pantalla
    //prevenir que el jugador salga de la pantalla
    float imageMitad= _jugador.texture.size.width * 0.5f;

    float izquiBordeLimite = imageMitad;
    float derecBordeLimite = _winSize.width - imageMitad;

    float superBordeLimite = _winSize.height - imageMitad;
    float inferBordeLimite = imageMitad;

    if (pos.x < izquiBordeLimite) {
        pos.x = izquiBordeLimite;
    } else if (pos.x > derecBordeLimite) {
        pos.x = derecBordeLimite;
    }

    if (pos.y < inferBordeLimite) {
        pos.y = inferBordeLimite;
    }else if (pos.y > superBordeLimite) {
        pos.y = superBordeLimite;
    }

    return pos;
}
-(void)update:(CFTimeInterval)currentTime {
    _jugador.position = [self actualizaMovimiento];

}

@end

1 个答案:

答案 0 :(得分:1)

-(void)update:(CFTimeInterval)currentTime {
    _jugador.position = [self actualizaMovimiento];

    int iSteps = 1; // Speed of you enemy
    CGPoint pos = _enemigo.position;

    if(_jugador.position.x < pos.x) {
      pos.x=pos.x-iSteps;
    } else {
      pos.x=pos.x+iSteps;
    }

    if(_jugador.position.y < pos.y) {
      pos.y=pos.y-iSteps;
    } else {
      pos.y=pos.y+iSteps;
    }

    _enemigo.position=pos;
}