由於cocos2d-x目前版本(3.4)仍然不能讀取spine 2.0後推出的binary格式(.skel)
加上自己沒有購買spine所以不能將binary檔匯入後再輸出為json格式
所以嚐試自己弄一個轉換的小工具
雖然最後沒有使用
但還是記載一下過程
由於spine官方目前有支援binary的runtime似乎只有libgdx
所以下面主要會以參考libgdx的方式來進行
使用eclipse新建一個java application
下載spine libgdx程式庫,放在src下
下載libgdx release版本(本次測試使用1.5.3)
解開後將gdx.jar加入專案
由於由於裡面有使用到nativecode
打開gdx-natives.jar
將需要的library取出(這裡使用的是libbdx64.dll)
並在讀入該library1
2
3static {
System.loadLibrary("gdx64");
}如果有找不到lib的狀況要記得在VM Arguments中加入下面內容
-Djava.library.path=D:\workspace_new\SpineBinary2Json\libs
新增libgdx的application並實作applicationListener
Application我是使用LwjglApplication,所以要將gdx-backend-lwjgl.jar與gdx-backend-lwjgl-natives.jar加入專案裡
之所以要這樣弄是因為我原本以為可以直接將TextureAtlas物件建立起來並生成SkeletonData
後來發現會出現錯誤如下1
2
3
4
5
6
7
8
9
10Exception in thread "main" java.lang.NullPointerException
at com.badlogic.gdx.graphics.GLTexture.createGLHandle(GLTexture.java:197)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:123)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:103)
at com.badlogic.gdx.graphics.g2d.TextureAtlas.load(TextureAtlas.java:244)
at com.badlogic.gdx.graphics.g2d.TextureAtlas.<init>(TextureAtlas.java:236)
at com.badlogic.gdx.graphics.g2d.TextureAtlas.<init>(TextureAtlas.java:231)
at com.badlogic.gdx.graphics.g2d.TextureAtlas.<init>(TextureAtlas.java:226)
at com.badlogic.gdx.graphics.g2d.TextureAtlas.<init>(TextureAtlas.java:216)
at Main.main(Main.java:76)發現應該是gl物件未產出
後來採最簡單的解法就是建立一個libgdx的application就會進行需要的初始化行為了依照binary編寫json檔案
這裡可以參照下面兩個格式的讀取行為
https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java
https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java
一開始採取從SkeletonData逆推的方式,但最後失敗
卡在我無法從skin逆推attachment
後來只好改採在SkeletonBinary讀取檔案的過程中同時將json建立起來的方法(直接修改SkeletonBinary.java)
但由於這樣做可能會有版權的問題
故這裡並不提供程式碼
做起來應該是不難只是有點麻煩而已