SpriteKit 如何检测节点是否在移动
SpriteKit How to detect if node is moving or not
对于我的游戏,我需要检测节点是否仍在移动。现在我尝试在一个时间间隔内比较新旧位置。如果位置具有相同的值,则节点不会移动。反之亦然。类似的东西:
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
}
您可以使用 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/
由于您是使用物理引擎移动对象,因此您只需检查速度即可。
if let v = aCuesMe[someIndex].physicsBody?.velocity {
if v == CGVector(dx: 0, dy: 0) {
// Object has 0 velocity and is not moving
}
}
对于我的游戏,我需要检测节点是否仍在移动。现在我尝试在一个时间间隔内比较新旧位置。如果位置具有相同的值,则节点不会移动。反之亦然。类似的东西:
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
}
您可以使用 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/
由于您是使用物理引擎移动对象,因此您只需检查速度即可。
if let v = aCuesMe[someIndex].physicsBody?.velocity {
if v == CGVector(dx: 0, dy: 0) {
// Object has 0 velocity and is not moving
}
}