更新期间如何检查 x 轴上的精灵位置
How can I check a sprites position on the x axis during update
我想在不使用物理体的情况下检测精灵移动的方向。
我尝试使用如下所示的物理体:
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' 上引用运算符函数“<”要求 'CGVector' 符合 '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
} ...
我想在不使用物理体的情况下检测精灵移动的方向。
我尝试使用如下所示的物理体:
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' 上引用运算符函数“<”要求 'CGVector' 符合 '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
} ...