首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纹理图谱动画间的平滑切换

纹理图谱动画间的平滑切换
EN

Stack Overflow用户
提问于 2015-06-19 20:14:28
回答 1查看 485关注 0票数 0

如何毫不延迟地在同一角色上的多个动画之间进行平滑转换?

我正在开发一个游戏在iOS斯威夫特与一个跳跃的角色。这个角色有一些动画,比如基本动画,跳跃动画和登陆动画。

我将每个动画的纹理地图集设置如下:

代码语言:javascript
复制
    // 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")

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

我试过这个:

代码语言:javascript
复制
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")
}

如何毫不延迟地在同一角色上的多个动画之间进行平滑转换?

EN

回答 1

Stack Overflow用户

发布于 2015-06-21 00:19:47

我可能是错的,但看起来(1 / 30)是你的罪犯,有几个原因。

  1. 1/30将返回一个int,它将为0。
  2. 如果你做了1.0/30.0,你会得到一个很好的浮动,你想要的,但它将是0.03333333333333,你要求它两次切换纹理每秒30次。这是相当快的,你甚至可能看不到它的变化。

我会先尝试.2,看看它是否改变了,如果有,那只是一个问题,你需要多快,以改变纹理。

希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30946563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档