2017-03-22 12 views
1

でアニメーションを記入してください。 現在、一連の画像をアニメーション化することができます。SpriteKitベースの色は、私は以下のように、ドロップの一つの画像を持っているスウィフト

しかし、これをスプライトキットとアニメーションで使用したいと思います。 どうすればスプライトキットでこれを行うことができますか?

私はSKTextureAtlasでそれをする考えがあります。 それは正しい方法ですか?

テクスチャの複数の画像を生成するツールはありますか?

答えて

2

あなたは常にStackOverflowの上のいくつかのコードを表示しようとする必要があり、それ以外の人は助けない傾向にあります。

SpriteKitでは、想定したようにSKTextureAtlasを使用します。

1)アセットカタログにアクセスして+をクリックし、ドロップダウンメニューから新しいスプライトアトラスを選択します。それをDropAtlasのようなものと呼んでください。あなたはそのアトラス内必要があるとして、各画像にラベルを付ける、など多くの画像セットを追加し、あなたのテクスチャにあなたは一度だけあなたのテクスチャをプリロードする必要があり、このようにヘルパークラスを作成します。この

dropImage_1 
dropImage_2 
dropImage_3 

2)ようなものを設定します。このクラスを他のテクスチャアニメーション用に簡単に拡張することができます。これはパフォーマンスにも役立ちます。あなたのアプリが例えばアプリの委任またはGameViewControllerを起動すると、セットアップメソッドを呼び出すより

class TextureHelper { 

     static var dropTextures = [SKTexture]() 

     static func setup() { 

      // Drop textures 
      let dropAtlas = SKTextureAtlas(named: "DropAtlas") // or the name you gave the atlas in step 1 
      for image in 1...3 { // how many images there are in the animation 
       let texture = dropAtlas.textureNamed("dropImage_\(image)") // or the name you gave the image sets 
       dropTextures.append(texture) 
      } 
     } 
} 

3)

TextureHelper.setup() 

4)そして最後に、あなたのシーンで、あなたはそうのようなノードをアニメーション化。

private let dropAnimationKey = "DropAnimationKey" 

class GameScene: SKScene { 

    let dropNode = SKSpriteNode(imageNamed: "dropImage_1") // defaults to image 1 

    override func didMove(to view: SKView) { 
     dropNode.position = ... 
     addChild(dropNode) 

     startDropNodeTextureAnimation() 
    } 

    private func startDropNodeTextureAnimation() { 
     guard !TextureHelper.dropTextures.isEmpty else { return } // so you dont crash incase texture array is empty for some reason 
     let textureAnimation = SKAction.animate(with: TextureHelper.dropTextures, timePerFrame: 0.3) 
     dropNode.run(SKAction.repeatForever(textureAnimation), withKey: dropAnimationKey) 
    } 

} 

あなたは、単純な私は良いツールが異なる画像を作成する何のためにあるのかわからない、正しいキー

dropNode.removeAction(forKey: dropAnimationKey) 

とアクションを削除することができ、アニメーションを停止します。

希望すると便利です。

0

私がこれを行う方法は2つの画像を持っています。白い輪郭が中心部が切り取られたpngとして、青い水がその後ろの別個の画像として表示されます。 clipToBoundsがオンになっているビューでそれらを設定すると、青いイメージがオーバーフローすることはありません。

はその後ややこのように、新しい値を設定するの周りにアニメーションを使用:

UIView.animate(withDuration: 0.3, animations: { 
    waterImage.center.y = newOffset 
}, completion: nil) 
関連する問題