是 Ray 不是 Array

整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ

Advertisement
2020-10-31 JavaScript

PixiJS V5 教學 (38) - TexturePacker

前言

通常來講大多遊戲的素材都會將許多圖片放在一張大圖中,然後透過一個工具去生成 json 減少載入次數。

TexturePacker

TexturePacker 是一款專門為了處理遊戲素材而出現的開發工具,下載點在這裡,TexturePacker 拆解後其實是 Texture(材質) + Packer(打包),好處是可以將一整張圖檔幫我們會出一個 json 檔案,省下我們自己計算位子等行為。

下載後我們就可以先打開 TexturePacker (選免費版就好) 然後放置 Play,稍後才會使用

TexturePacker

接下來在官方網站這裡有提供一個範例圖檔

範例圖檔

從官方網站下載的圖檔可能是 .webp 的副檔名,這邊可以使用這個網站來轉換

我這邊直接提供我拆開好的範例圖檔,這樣子等一下才能夠練習。

匯入圖檔

接下來就是要剛剛的連續圖匯入到 TexturePacker,匯入圖檔得方式是點上方 「Add sprites」

Add sprites

然後匯入範例圖檔

匯入全部範例圖檔

匯入完畢之後其實可以全選整個圖檔,然後按下預覽,你就可以看到圖片會動,我這邊就不展示了。

接下來就是按下發布精靈表即可,但是這邊建議有一個地方要調整一下,就是右側需要選擇框架,由於我們是使用 PixiJS 所以記得改調整這區塊

轉換成 PixiJS

確定沒問題後就按下發布精靈,此時就會生成精靈表(也就是所謂的雪碧圖)以及 json

雪碧圖&JSON

接下來其他動作就沒有太大的差異,我這邊就不再多介紹程式碼相關直接附上成果(由於 JSON 檔案沒地方只能貼近去 codepen)

完整程式碼一樣也附在這裡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const app = new PIXI.Application({
view: document.getElementById('main'),
width: 512,
height: 512,
antialias: true,
transparent: false,
backgroundColor: 0x00CC99,
});

const animals = {
... // JSON 太長所以忽略
}

const loader = new PIXI.Loader();
loader
.add('run',animals.meta.image)
.load((loader, resource)=> {
init(resource);
})

function init(resource) {
const gameImg = resource;
const textureArray = [];
for(let i in animals.frames) {
let frame = animals.frames[i].frame;
let rectangle = new PIXI.Rectangle(frame.x, frame.y, frame.w, frame.h);
let Newtexture = new PIXI.Texture(gameImg.run.texture, rectangle);
// const sprite = new PIXI.Sprite(Newtexture);
textureArray.push(Newtexture);
}
let animatedSprite = new PIXI.AnimatedSprite(textureArray);
app.stage.addChild(animatedSprite);
// 控制播放速度
animatedSprite.animationSpeed = 0.2;
animatedSprite.play();
}

TexturePacker 中文化

另外 TexturePacker 是有中文化的,只需要點一下上方 「Preferences」,然後底下有一個 「Languge」將它改成 「Chinese」,然後重啟 TexturePacker 就可以囉~

中文化

參考文獻

整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ

Advertisement

你的支持會直接轉換成更多技術筆記

如果我的筆記讓你少踩一個坑、節省 Debug 的時間,
也許你可以請我喝杯咖啡,讓我繼續當個不是 Array 的 Ray ☕

buymeacoffee | line | portaly

Terminal

分享這篇文章

留言

© 2025 Ray. All rights reserved.

Powered by Ray Theme