Ios 更新期间如何检查x轴上的精灵位置
我想在不使用物理体的情况下检测精灵移动的方向 我尝试使用一个物理实体,如下所示:Ios 更新期间如何检查x轴上的精灵位置,ios,swift,sprite-kit,skphysicsbody,Ios,Swift,Sprite Kit,Skphysicsbody,我想在不使用物理体的情况下检测精灵移动的方向 我尝试使用一个物理实体,如下所示: if player!.physicsBody!.velocity < 0 { //Referencing operator function '<' on 'BinaryInteger' requires that 'CGVector' conform to 'BinaryInteger' ***** player! = SKSpriteNode(texture: leftF
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)
}
if player!。物理体!。速度<0{
//引用操作符函数“为什么不在更新中检查精灵的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
}
}
private-var-timeCheck:Double=0
私有变量lastPosX:CGFloat!
覆盖函数更新(uCurrentTime:TimeInterval){
如果timeCheck==0{
时间检查=当前时间
lastPosX=someSprite.position.x
返回
}
//每秒检查10次,而不是60次
如果currentTime-currentTime>0.1{
设xDif=someSprite.position.x-lastPosX
如果xDif==0{
//不动
}
如果xDif<0,则为else{
//向左移动
}
否则{
//向右移动
}
时间检查=当前时间
lastPosX=someSprite.position.x
}
}
为什么不在更新中检查精灵的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
}
}
private-var-timeCheck:Double=0
私有变量lastPosX:CGFloat!
覆盖函数更新(uCurrentTime:TimeInterval){
如果timeCheck==0{
时间检查=当前时间
lastPosX=someSprite.position.x
返回
}
//每秒检查10次,而不是60次
如果currentTime-currentTime>0.1{
设xDif=someSprite.position.x-lastPosX
如果xDif==0{
//不动
}
如果xDif<0,则为else{
//向左移动
}
否则{
//向右移动
}
时间检查=当前时间
lastPosX=someSprite.position.x
}
}
速度是一个向量,向量有方向,但没有自然顺序。如果您只对x轴感兴趣,并且想知道玩家是向左还是向右移动,则需要速度的x分量:
if player!.physicsBody!.velocity.dx<0{
//当玩家向左移动时使用的东西
...
}
此外,您可能不想更改播放器节点,如player!=SKSpriteNode(纹理:leftFrameTexture)
,因为您正在丢弃与播放器相关的所有内容,如物理实体、位置、方向、比例等。看起来您只想更改纹理,因此:
if player!.physicsBody!.velocity.dx<0{
播放器!.texture=leftFrameTexture
} ...
速度是一个向量,向量有方向,但没有自然顺序。如果您只对x轴感兴趣,并且想知道玩家是向左还是向右移动,则需要速度的x分量:
if player!.physicsBody!.velocity.dx<0{
//当玩家向左移动时使用的东西
...
}
此外,您可能不想更改播放器节点,如player!=SKSpriteNode(纹理:leftFrameTexture)
,因为您正在丢弃与播放器相关的所有内容,如物理实体、位置、方向、比例等。看起来您只想更改纹理,因此:
if player!.physicsBody!.velocity.dx<0{
播放器!.texture=leftFrameTexture
} ...
您的a英雄,感谢添加的澄清/解释您的a英雄,感谢添加的澄清/解释