一步一步圖文介紹SpriteKit使用TexturePacker導出的紋理集Altas

一、爲何要使用紋理集?

遊戲是一種很耗費資源的應用,特別是在移動設備中的遊戲,性能優化是很是重要的web

紋理集是將多張小圖合成一張大圖,使用紋理集有如下優勢:swift

一、減小內存佔用,減小磁盤佔用;性能優化

二、減小磁盤讀取次數,一次性讀取一張大圖比屢次讀取多張小圖速度更快
一張大圖:打開-讀取小圖-讀取小圖-讀取小圖-關閉;
多張小圖:打開-關閉,打開-關閉,打開-關閉,打開-關閉;ide

三、減小OpenGL繪製次數;
OpenGL ES 1.1僅僅可以使用2的n次冪大小的圖片(即寬度或者高度是二、四、八、64...)。若是採用小圖片OpenGL ES1.1會分配給每一個圖片2的n次冪大小的內存空間,即便這張圖片達不到這樣的寬度和高度也會分配大於此圖片的2的n次冪大小的空間。那麼運用這種圖片集的方式將會減小內存碎片。雖然在Cocos2d-x v2.0後使用了OpenGL ES 2.0,它不會再分配2的幾回冪的內存塊了,可是減小讀取次數和繪製的優點依然存在。性能

二、SpriteKit導入SKTexturePacker的紋理集

上官網 www.codeandweb.com 下載 TexturePacker
1_texturePacker下載_www.codeandweb.com.png
沒有去除空白邊角的原始圖片
1_texturePacker用法.png

直接把圖片文件夾拖入軟件左側的導航欄
2_texturePacker用法_拖動.png優化

TexturePacker直接剪切圖片變生成一張大圖
3_texturePacker用法_自動剪切.png動畫

點擊右下角高級設置 Advanced settings>>
4_texturePacker用法_高級設置.pngspa

選擇 Data Format 爲SpriteKit,並生成Altas及Swift
5_texturePacker用法_生成Atlas.pngcode

並生成Altas及Swift 以前能夠全選左側導航欄的全部圖片,並點擊"Anim preview" 預覽動畫
6_texturePacker用法_預覽動畫.pngorm

命名Altas文件夾名稱及Swift文件名(class爲首字母大寫)
7_texturePacker用法_生成Atals_swift.png

發佈Altas及Swift
8_texturePacker用法_發佈.png

發佈Altas及Swift 成功 ,查看發佈結果
9_texturePacker用法_發佈結果.png

把Altas及Swift拖進XCode工程內
10_texturePacker用法_導入atlasc及swift文件.png

類JumpRight爲class類,首字母應爲大寫
11_texturePacker用法_swift類Class首寫字母爲大寫.png

JumpRight內的代碼
12_texturePacker用法_JumpRight類.png

定位SpriteKitNode精靈節點在場景中的位置
13_texturePacker用法_scene定位精靈.png

實例化一個類 並代碼調用
14_texturePacker用法_代碼調用.png

SpriteKit 調用TexturePacker 的最終效果
15_texturePacker用法_最終效果.png

SpriteKit 調用TexturePacker 的源代碼

//
//  GameScene.swift
//  BabeKitten 
//  Copyright © 2018 iFiero.com. All rights reserved.
//

import SpriteKit
import GameplayKit

class GameScene: SKScene {
 
    let catJumpRight = JumpRight()
    private var cat:SKSpriteNode!
    private var catJump:SKSpriteNode!
    
    
    override func didMove(to view: SKView) {
        
        cat = SKSpriteNode(texture:catJumpRight.jumpRight01()) // 調用圖片
        cat.position = CGPoint(x: CGFloat(-450), y: CGFloat(-400))
        cat.setScale(0.5)
        cat.zPosition = 1
        self.addChild(cat)
        
        catJump = SKSpriteNode(texture: catJumpRight.jumpRight01()) // 調用圖片1
        catJump.position = CGPoint(x: CGFloat(370), y: CGFloat(-400))
        catJump.setScale(0.5)
        catJump.zPosition  = 1
        self.addChild(catJump)
        let jumpAction = SKAction.animate(with: catJumpRight.jumpRight(), timePerFrame: TimeInterval(0.05))
        let repeatAction = SKAction.repeatForever(jumpAction)
        catJump.run(repeatAction)
    }
    

    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
    }
}

以上就是使用TexturePacker的全部步聚及源碼!

源碼傳送門:http://www.iFIERO.com/uploads...
更多遊戲教學:http://www.iFIERO.com

相關文章
相關標籤/搜索