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