gpt4 book ai didi

ios - 纹理图集动画之间平滑切换

转载 作者:行者123 更新时间:2023-11-30 14:17:31 25 4
gpt4 key购买 nike

如何在同一角色的多个动画之间实现平滑过渡而不出现延迟?

我正在 iOS Swift 中开发一款带有跳跃角色的游戏。这个角色有一些动画,比如基本动画、跳跃动画和着陆动画。

我为每个动画设置纹理图集如下:

    // Basic
let surferBasicAnimatedAtlas = SKTextureAtlas(named: "surfer_basic.atlas")

let numImages = surferBasicAnimatedAtlas.textureNames.count

for var i=0; i<numImages; i++ {
let surferBasicTextureName = "surfer_basic_000\(i)"
self.surferBasicFrames.append(surferBasicAnimatedAtlas.textureNamed(surferBasicTextureName))
}

// Jump
let surferJumpAnimatedAtlas = SKTextureAtlas(named: "surfer_jump.atlas")

let numJumpImages = surferJumpAnimatedAtlas.textureNames.count

for var i=0; i<numJumpImages; i++ {
let surferJumpTextureName = "surfer_jump_000\(i)"
self.surferJumpFrames.append(surferJumpAnimatedAtlas.textureNamed(surferJumpTextureName))
}

// Landing
let surferLandingAnimatedAtlas = SKTextureAtlas(named: "surfer_landing.atlas")

let numLandingImages = surferLandingAnimatedAtlas.textureNames.count

for var i=12; i<numLandingImages; i++ {
let surferLandingTextureName = "surfer_landing_000\(i)"
self.surferLandingFrames.append(surferLandingAnimatedAtlas.textureNamed(surferLandingTextureName))
}

// Pick textures
self.surferWalkingFrames = surferBasicFrames

let firstFrame = surferWalkingFrames[0]
self.character = SKSpriteNode(texture: firstFrame)

self.character.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(surferWalkingFrames, timePerFrame: (1 / 30), resize: false, restore: true)), withKey:"surferBasic")

当我触摸屏幕时,基本动画应该停止,跳跃动画应该运行,但它会导致延迟。触摸后大约一秒,跳跃动画开始。

我已经尝试过这个:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

self.character.removeActionForKey("surferBasic")

self.surferWalkingFrames = surferJumpFrames
self.character.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(surferWalkingFrames, timePerFrame: (1 / 30), resize: false, restore: true)), withKey:"surferJump")
}

如何在同一角色的多个动画之间实现无延迟的平滑过渡?

最佳答案

我可能是错的,但由于几个原因,看起来 (1/30) 是你的冒犯者。

  1. 1/30 将返回一个 int,并且结果为 0
  2. 如果你选择1.0/30.0,你会得到一个像你想要的那样的漂亮 float ,但它将是0.03333333333333,并且你要求它每秒切换纹理30次。这是相当快的,你甚至可能看不到它的变化。

我会先尝试 .2,看看是否会改变任何东西,如果改变的话,那么这只是找到改变纹理需要多快的问题。

希望有帮助。

关于ios - 纹理图集动画之间平滑切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com