如何在不停止的情况下将物体移向方向

时间:2017-01-11 23:21:48

标签: swift sprite-kit swift3

我正在使用SpriteKit在Swift 3中开发一个小游戏,我希望将敌人移动到角色的方向,但是当敌人到达角色的初始位置时,敌人始终停止。

我这样做:

enemigo.name = "enemigo"
enemigo.position = CGPoint(x: 280, y: 100)
enemigo.xScale = 1/1
enemigo.yScale = 1/15
addChild(enemigo)


let movement1 = CGVector(
    dx: (enemigo.position.x - personaje.position.x)*10,
    dy: (enemigo.position.y - personaje.position.y)*10
)

let actionTransaction = SKAction.move(by: movement1, duration: 20)
enemigo.run(actionTransaction)

如何在不停留在角色的初始位置的情况下将敌人移动到特定方向?

2 个答案:

答案 0 :(得分:2)

你已经完成了确定方向向量的所有艰苦工作。

现在你可以随心所欲地重复这个moveBy action,敌人将继续朝着同一个方向前进,因为move(by: CGVector)是相对的,而不是绝对的:

let actionTransaction = SKAction.move(by: movement1, duration: 20)

所以你需要做的就是永远地运行with a key,这样你就可以从任何地方找到它,并随时停下来。

run(SKAction.repeatForever(actionTransaction), withKey: "movingEnemy")

答案 1 :(得分:1)

或者,您可以考虑将GameplayKit与SpriteKit一起使用。 GameplayKit为游戏提供常用算法的标准实现,可与SpriteKit一起使用。

不幸的是我不太熟悉它,所以我不能给你代码。我建议你看一下Apple的GameplayKit编程指南。有一些功能可用于设定代理人(例如敌人)的目标,以移动到特定位置,避开障碍物,拦截另一个代理人,或逃离代理人等。

因此,当你的玩家移动时,一些敌人可以编程试图捕捉玩家,而其他敌人可能会试图逃离玩家。其他敌人可以随意游荡等等。

简而言之,GameplayKit可以为SpriteKit游戏添加非常强大的功能。这可能意味着花费更多的时间来考虑游戏的体系结构,但最终如果您还将使用GameplayKit的其他功能则值得。