我使用精灵套件来制作游戏。
我有一个玩家节点,我通过触摸控制,但后来我有一个独立移动的敌人节点。我需要敌人能够自己射击弹丸。我猜我需要一个方法来调用它。我需要射弹的方向射击我的球员所在的地方。有什么建议吗?
这是我的方法:
-(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]]];
}
但是当我打电话时没有任何反应。
答案 0 :(得分:0)
在两种情况下它将“无所作为”:图像不存在或敌人对玩家是正确的。替换此行
if (offset.x <= 0) return;
检查偏移向量的长度是否为0.您可以使用
编写一种计算长度的方法sqrtf(powf(offset.x,2) + powf(offset.y,2))
此外,您应该使用shootAmount的长度来计算
float realMoveDuration = 1000 / velocity;
这将为每个射弹提供相同(和正确)的速度。但是否则我认为你的代码没有错。