我正在使用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)
如何在不停留在角色的初始位置的情况下将敌人移动到特定方向?
答案 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的其他功能则值得。