所以我的游戏几乎完成了...但是当我按下我的手指在屏幕上时会发生这种小故障或抖动,现在我已经注意到了,我可以'没有注意到......
它发生得非常快,只有在调用函数来处理tap& hold(长按)时才会发生。这是在使用计时器传递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
}
答案 0 :(得分:1)
Yikes,你如何创建纹理会减慢你的速度,每次触摸都会产生新的纹理,这是不需要的。而是做:
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")
}