SpriteKit如何检测节点是不是正在移动

Posted

技术标签:

【中文标题】SpriteKit如何检测节点是不是正在移动【英文标题】:SpriteKit How to detect if node is moving or notSpriteKit如何检测节点是否正在移动 【发布时间】:2018-07-31 07:46:19 【问题描述】:

对于我的游戏,我需要检测节点是否仍在移动。现在我尝试在一个时间间隔内比较新旧位置。如果位置具有相同的值,则节点不会移动。反之亦然。类似的东西:

 if aStonesPositionsOld[index] == aStonesPositionsNew[index] 
                        print("# stone \(index) is not moving")
                    

有人知道检查节点是否移动的更好更简单的方法吗?

更新。回答 KnighOfDragon 的问题(节点如何开始移动?) 如果被触摸,或者更准确地说——用手指移动,节点就会开始移动。这是一个代码:

      if touching 

            let dt:CGFloat = 1.0/60.0
            let distance = CGVector(dx: touchPoint.x-aCuesMe[touchingNr].position.x, dy: touchPoint.y-aCuesMe[touchingNr].position.y)

            velocity = CGVector(dx: distance.dx/dt, dy: distance.dy/dt)
            aCuesMe[touchingNr].physicsBody!.velocity=velocity
        

【问题讨论】:

需要更多细节,节点是如何开始移动的? 已答复。查看我的帖子的更新。 【参考方案1】:

由于您正在使用物理引擎移动对象,您所要做的就是检查速度。

if let v = aCuesMe[someIndex].physicsBody?.velocity 
    if v == CGVector(dx: 0, dy: 0) 
        // Object has 0 velocity and is not moving
    

【讨论】:

【参考方案2】:

您可以从GameplayKit 使用GKAgent2D 来实现此目的。它有属性velocity。更多信息请阅读 Apple 文档:https://developer.apple.com/library/archive/documentation/General/Conceptual/GameplayKit_Guide/Agent.html#//apple_ref/doc/uid/TP40015172-CH8

并观看视频: https://developer.apple.com/videos/play/wwdc2016/608/

【讨论】:

以上是关于SpriteKit如何检测节点是不是正在移动的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SpriteKit 中跟踪接触后的节点移动

SpriteKit:检测 UILongPressGestureRecognizer 是不是点击了子节点

SpriteKit + Swift - 如何通过缓动移动节点?

Spritekit Hexagonal map:SKAction 中的瓦片检测。

Spritekit:如何将玩家移动限制在某些瓷砖上

SpriteKit:如何检测从节点外部开始的节点上的触摸