【问题标题】:how to make enemy sprite shoot at player如何让敌人的精灵向玩家射击
【发布时间】:2014-07-15 03:50:50
【问题描述】:

我正在使用精灵套件来创建游戏。

我有一个玩家节点,我可以通过触摸来控制它,但我有一个可以自行移动的敌人节点。我需要敌人能够自己发射弹丸。我猜我需要一个方法来调用它。无论我的玩家在哪里,我都需要射弹的方向。有什么建议吗?

这是我的方法:

  -(void)monstershoot
 {

SKSpriteNode * projectile = [SKSpriteNode spriteNodeWithImageNamed:@"projectile"];
projectile.position = _enemy.position;

CGPoint offset = rwSub(_player.position, projectile.position);

if (offset.x <= 0) return;

[_background addChild:projectile];

CGPoint direction = rwNormalize(offset);
CGPoint shootAmount = rwMult(direction, 1000);
CGPoint realDest = rwAdd(shootAmount, projectile.position);

// 9 - Create the actions
float velocity = 480.0/1.0;
float realMoveDuration = self.size.width / velocity;
SKAction * actionMove = [SKAction moveTo:realDest duration:realMoveDuration];
SKAction * actionMoveDone = [SKAction removeFromParent];
[projectile runAction:[SKAction sequence:@[actionMove, actionMoveDone]]];
}

但是当我调用它时没有任何反应。

【问题讨论】:

  • “什么都没发生”是什么意思?
  • 敌人没有射弹。敌人就在那里。重点是让他们向我的球员开枪。但“什么也没发生”@CHBuckingham
  • NSLog 偏移量,你会明白为什么。 :-)

标签: ios xcode sprite-kit


【解决方案1】:

在两种情况下它会“什么都不做”:图像不存在或敌人在玩家的右边。替换这一行

if (offset.x <= 0) return;

通过检查偏移向量的长度是否为0。您可以编写一个方法来计算长度使用

sqrtf(powf(offset.x,2) + powf(offset.y,2))

进一步你应该使用shootAmount的长度来计算

float realMoveDuration = 1000 / velocity;

这将为每个弹丸提供相同(且正确)的速度。但除此之外,我认为您的代码没有任何问题。

【讨论】:

  • 我没有注意到 if 语句需要更改。很简单。你是对的敌人是玩家的权利。谢谢@罗伯特
猜你喜欢
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
相关资源
最近更新 更多