如何在不停止的情况下将物体朝一个方向移动
Posted
技术标签:
【中文标题】如何在不停止的情况下将物体朝一个方向移动【英文标题】:How to move an object towards a direction without stopping 【发布时间】:2017-01-11 23:21:48 【问题描述】:我正在使用 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)
如何在不停留在角色初始位置的情况下将敌人移动到特定方向?
【问题讨论】:
基本上你想让敌人追玩家? 我想在不停止@Fluidity 的情况下将敌人移向我角色的方向 好的。您需要在场景的.update()
方法中更新敌人的动作。否则你的坏人只会得到一个动作......他需要更多!此外,这里有一篇很棒的文章,介绍了如何为它做正确的数学运算:raywenderlich.com/90520/…
好的,谢谢! @流动性
@Fluidity 这不是那么高效,也不需要在更新方法中运行 SKAction。该方法每秒执行 60 次。如果使用它,则直接更改节点的位置属性。像这样:***.com/a/36235426/3402095
【参考方案1】:
您已经完成了所有艰苦的工作来确定方向向量。
现在你可以随心所欲地重复这个moveBy action,敌人会继续朝着同一个方向前进,越走越远,因为move(by: CGVector)
是相对的,而不是绝对的:
let actionTransaction = SKAction.move(by: movement1, duration: 20)
所以你需要做的就是永远运行这个with a key,这样你就可以从任何地方寻找它,并在你喜欢的时候停止它。
run(SKAction.repeatForever(actionTransaction), withKey: "movingEnemy")
【讨论】:
我在一个函数中有let actionTransaction = SKAction.move(by: movement1, duration: 20)
,我在sceneDidLoad()
中调用了这个函数,但它没有按我想要的方式运行。我应该如何使用run(SKAction.repeatForever(actionTransaction), withKey: "movingEnemy")
? @困惑
我认为你读了这个问题有点字面上的困惑:P
@HessianMad 我认为我们中的任何人都不太了解您要做什么。你能详细说明一下吗? O, me explica en español :), y voy a intentar entenderlo
@HessianMad 你说同样的话 3 次。你想让敌人移动。既然那不是你想要的,那就画一张你想要的图。
@Fluidity,是的...我应该将此作为评论发布... ;)【参考方案2】:
或者,您可以考虑将 GameplayKit 与 SpriteKit 一起使用。 GameplayKit 提供游戏常用算法的标准实现,可与 SpriteKit 配合使用。
不幸的是我对它不太熟悉,所以我不能给你代码。我建议看看 Apple 的 GameplayKit 编程指南。有一些功能可用于设置代理(例如敌人)的目标以向特定位置移动、避开障碍物、拦截另一个代理或逃离代理等。
因此,当您的玩家移动时,可以对一些敌人进行编程以试图抓住玩家,而其他敌人可能会试图逃离玩家。可以让其他敌人随机游荡,等等。
简而言之,GameplayKit 可以为 SpriteKit 游戏添加相当强大的功能。这可能意味着要花更多时间预先考虑游戏的架构,但最终如果您还使用 GameplayKit 的其他功能,这可能是值得的。
【讨论】:
以上是关于如何在不停止的情况下将物体朝一个方向移动的主要内容,如果未能解决你的问题,请参考以下文章
如何在不丢失鼠标抓取的情况下将 QGraphicsItem 移动到另一个场景?
你知道如何在不改变其他元素顺序的情况下将元素移动到第一个位置吗?
如何在不移动滑块拇指色调的情况下将多种颜色应用于uislider轨道?