所以我的游戏几乎完成了...但是当我在屏幕上按住手指时会出现小故障或抖动,现在我注意到了,我不能不注意...

它发生的非常快,并且仅在调用一个函数来处理点击并按住(长按)时才会发生。使用计时器经过0.2秒后,就会发生这种情况。

我已经尝试过对其进行断点锁定,以查明代码中抖动发生的确切位置,但是似乎我无法对其进行足够的微调来定位它。

我的更新方法很典型:

override func update(currentTime: CFTimeInterval) {

    //calc delta time
    if lastUpdateTime > 0 {
        dt = currentTime - lastUpdateTime
    } else {
        dt = 0
    }
    lastUpdateTime = currentTime

    //timer for handleLongPress
    if touched {
        longTouchTimer += dt
    }

    if longTouchTimer >= 0.2 && !canLongPressNow {
        canLongPressNow = true
        handleLongPress()
    } else {
        canLongPressNow = false
    }

    ...
    //switch GameSate
    //switch CharacterState
}


我处理LongPress的功能是这样的:

func handleLongPress() {
    //switch gameState
    //if in gameplay gamestate
        if canLongPressNow {
            //rotate player
            //change character state
            startPlayerAnimation_Sliding()
        }
    touched = false
    longTouchTimer = 0
}


startPlayerAnimation_Sliding()只是迭代playerNode的纹理数组。

func startPlayerAnimation_Sliding() {
   var textures: Array<SKTexture> = []
    for i in 0..<KNumSlideFrames{
        textures.append(SKTexture(imageNamed: "slide\(i)"))
    }
    let playerAnimation = SKAction.animateWithTextures(textures, timePerFrame: 0.3)
    player.runAction(SKAction.repeatActionForever(playerAnimation), withKey: "sliding")
}


是否有任何明显的原因可能导致这种情况?

更新

我已经从我的update(..)方法中删除了它,看起来又很平滑...而且我不知道为什么...?也许是因为它正在删除尚未创建的密钥(爆炸)?还是事实上每帧都删除了这些键……虽然没有任何意义……但我称它为一个夜晚,明天再来看一遍。感谢您一直以来的帮助。晚上好。 (明天更新)

    //for animations
    switch characterState {
        case .Running:
            player.removeActionForKey("exploding")
            player.removeActionForKey("sliding")
            break
        case .Sliding:
            player.removeActionForKey("running")
            player.removeActionForKey("exploding")
            break
        case .Exploding:
            player.removeActionForKey("running")
            player.removeActionForKey("sliding")
            break
    }

最佳答案

kes,创建纹理的方法使您的工作减慢了很多,每次触摸时都在创建新纹理,这是不需要的。而是:

var textures: Array<SKTexture> = []
var playerAnimation : SKAction?
func loadingPhase()  //however this is defined for you
{
    for i in 0..<KNumSlideFrames{
        textures.append(SKTexture(imageNamed: "slide\(i)"))
    }
    playerAnimation = SKAction.repeatActionForever(SKAction.animateWithTextures(textures, timePerFrame: 0.3))

}
func startPlayerAnimation_Sliding() {


    player.runAction(playerAnimation!, withKey: "sliding")
}

关于ios - 点击屏幕时滞后/抖动小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34365093/

10-12 19:52