SpriteKit如何检测节点是否在移动

时间:2018-07-31 07:46:19

标签: sprite-kit position game-physics skspritenode

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

 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
        }

2 个答案:

答案 0 :(得分:0)

您可以从GKAgent2D中使用GameplayKit。它具有属性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/

答案 1 :(得分:0)

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

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