我想在不使用物理物体的情况下检测精灵向哪个方向移动。
我尝试使用如下所示的物理物体:
if player!.physicsBody!.velocity < 0 {
//Referencing operator function '<' on 'BinaryInteger' requires that 'CGVector' conform to
'BinaryInteger' *****
player! = SKSpriteNode(texture: leftFrameTexture)
}
else if player!.physicsBody!.velocity > 0 {
//Referencing operator function '<' on 'BinaryInteger' requires that 'CGVector' conform to
'BinaryInteger' *****
player! = SKSpriteNode(texture: firstFrameTexture)
}
但收到错误:在'BinaryInteger'上引用运算符'
必须有一种更简单的方法。除了速度外,我不需要任何物理学,如果我能告诉精灵运动的方向,就不需要速度。
为什么不只检查更新中精灵的x位置?
private var timeCheck: Double = 0
private var lastPosX: CGFloat!
override func update(_ currentTime: TimeInterval) {
if timeCheck == 0 {
timeCheck = currentTime
lastPosX = someSprite.position.x
return
}
//check 10 times a second versus 60
if currentTime - currentTime > 0.1 {
let xDif = someSprite.position.x - lastPosX
if xDif == 0 {
//not moving
}
else if xDif < 0 {
//moving left
}
else {
//moving right
}
timeCheck = currentTime
lastPosX = someSprite.position.x
}
}
速度是一个向量,向量具有方向,但没有自然顺序。如果您只对x轴感兴趣,并且玩家是否在向左或向右移动,则需要速度的x分量:
if player!.physicsBody!.velocity.dx < 0 {
// Stuff for when the player is moving left
...
}
而且,您可能不想像player! = SKSpriteNode(texture: leftFrameTexture)
那样更改播放器节点,因为您要丢弃与播放器关联的所有内容,例如物理物体,位置,方向,比例等。要更改纹理,所以:
if player!.physicsBody!.velocity.dx < 0 {
player!.texture = leftFrameTexture
} ...