package com.tony.rider.animation02;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.JsonReader;
import com.badlogic.gdx.utils.JsonValue;
import com.esotericsoftware.spine.SkeletonData;
import com.tony.rider.spine.BseInterpolation;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
/**
* 解析文件,
*/
public class ReadJson {
public SkeletonData readSkeletonData(String file) throws IOException {
file = " {\n" +
" \"skeleton\":{\n" +
" \"hash\":\"UzQWI5f97md5hXviczZjvytbYdc\",\n" +
" \"spine\":\"3.6.52\",\n" +
" \"width\":1231,\n" +
" \"height\":540,\n" +
" \"images\":\"./images/\"\n" +
" },\n" +
" \"bones\":[\n" +
" {\n" +
" \"name\":\"root\"\n" +
" },\n" +
" {\n" +
" \"name\":\"text\",\n" +
" \"parent\":\"root\"\n" +
" }\n" +
" ],\n" +
" \"slots\":[\n" +
" {\n" +
" \"name\":\"ssss\",\n" +
" \"bone\":\"text\",\n" +
" \"attachment\":\"ssss\"\n" +
" },\n" +
" {\n" +
" \"name\":\"ssss2\",\n" +
" \"bone\":\"text\",\n" +
" \"attachment\":\"ssss\"\n" +
" }\n" +
" ],\n" +
" \"skins\":{\n" +
" \"default\":{\n" +
" \"ssss\":{\n" +
" \"ssss\":{\n" +
" \"width\":1231,\n" +
" \"height\":540\n" +
" }\n" +
" },\n" +
" \"ssss2\":{\n" +
" \"ssss\":{\n" +
" \"width\":1231,\n" +
" \"height\":540\n" +
" }\n" +
" }\n" +
" }\n" +
" },\n" +
" \"animations\":{\n" +
"\n" +
" \"2\":{\n" +
" \"slots\":{\n" +
" \"ssss\":{\n" +
" \"color\":[\n" +
" {\n" +
" \"time\":0,\n" +
" \"color\":\"ffffff00\",\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":0.1667,\n" +
" \"color\":\"ffffffff\",\n" +
" \"curve\":\"stepped\"\n" +
" },\n" +
" {\n" +
" \"time\":0.8333,\n" +
" \"color\":\"ffffffff\",\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":1.0667,\n" +
" \"color\":\"ffffff00\"\n" +
" }\n" +
" ]\n" +
" },\n" +
" \"ssss2\":{\n" +
" \"color\":[\n" +
" {\n" +
" \"time\":0,\n" +
" \"color\":\"ffffff00\",\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":0.1667,\n" +
" \"color\":\"ffffffff\",\n" +
" \"curve\":\"stepped\"\n" +
" },\n" +
" {\n" +
" \"time\":0.8333,\n" +
" \"color\":\"ffffffff\",\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":1.0667,\n" +
" \"color\":\"ffffff00\"\n" +
" }\n" +
" ]\n" +
" }\n" +
" },\n" +
" \"bones\":{\n" +
" \"text\":{\n" +
" \"rotate\":[\n" +
" {\n" +
" \"time\":0,\n" +
" \"angle\":25.98,\n" +
" \"curve\":\"stepped\"\n" +
" },\n" +
" {\n" +
" \"time\":0.1667,\n" +
" \"angle\":25.98,\n" +
" \"curve\":\"stepped\"\n" +
" },\n" +
" {\n" +
" \"time\":0.3333,\n" +
" \"angle\":25.98,\n" +
" \"curve\":\"stepped\"\n" +
" },\n" +
" {\n" +
" \"time\":0.9333,\n" +
" \"angle\":25.98,\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":1.0667,\n" +
" \"angle\":-39.88\n" +
" }\n" +
" ],\n" +
" \"translate\":[\n" +
" {\n" +
" \"time\":0,\n" +
" \"x\":-444.01,\n" +
" \"y\":587.66,\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":0.1667,\n" +
" \"x\":34.82,\n" +
" \"y\":-69.65,\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":0.3333,\n" +
" \"x\":0,\n" +
" \"y\":0,\n" +
" \"curve\":\"stepped\"\n" +
" },\n" +
" {\n" +
" \"time\":0.9333,\n" +
" \"x\":0,\n" +
" \"y\":0,\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":1.0667,\n" +
" \"x\":931.54,\n" +
" \"y\":966.37\n" +
" }\n" +
" ],\n" +
" \"scale\":[\n" +
" {\n" +
" \"time\":0,\n" +
" \"x\":2.073,\n" +
" \"y\":2.073,\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":0.1667,\n" +
" \"x\":0.8,\n" +
" \"y\":0.8,\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":0.3333,\n" +
" \"x\":1,\n" +
" \"y\":1,\n" +
" \"curve\":\"stepped\"\n" +
" },\n" +
" {\n" +
" \"time\":0.8333,\n" +
" \"x\":1,\n" +
" \"y\":1,\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":0.9333,\n" +
" \"x\":0.7,\n" +
" \"y\":0.7,\n" +
" \"curve\":[\n" +
" 0.25,\n" +
" 0,\n" +
" 0.75,\n" +
" 1\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"time\":1.0667,\n" +
" \"x\":1.5,\n" +
" \"y\":1.5\n" +
" }\n" +
" ]\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
"}";
JsonValue root = new JsonReader().parse(file);
//获取动画
JsonValue animations = root.get("animations");
int animationNums = animations.size;
Array<MyScaleAction> scales = new Array<>();
Array<MyRotateAction> rotates = new Array<>();
Array<MyColorAction> colors = new Array<>();
Array<Translate> translates = new Array<>();
ArrayList arrays = new ArrayList();
/**
* 那个动画 动画名字
*/
HashMap<String, Action> hashMap = new HashMap<>();
for (int animationnameIndex = 0; animationnameIndex < animationNums; animationnameIndex++) {
//获取动画animationnameIndex
JsonValue animationRes = animations.get(animationnameIndex);
//slots bonues
System.out.println(animationRes.name+" animation Name : ");
// 下面的并行
for (int animationResIndex = 0; animationResIndex < animationRes.size; animationResIndex++) {
JsonValue slotOrBonus = animationRes.get(animationResIndex);
HashMap<String,Action> actionHashMap = new HashMap<>();
//下面有多个
System.out.println(slotOrBonus.name+" slot or bonus : ");
for (int xz = 0; xz < slotOrBonus.size; xz++) {
JsonValue childzz = slotOrBonus.get(xz);
//slot 或者 bonus下的动画文件
//线性加入 一个完整的 它属于那个资源的
System.out.println(childzz.name+" texture name : ");
SequenceAction seqTemp = Actions.sequence();
for (int zz = 0; zz < childzz.size; zz++) {
//一系列动画
JsonValue child = childzz.get(zz);
if (child.name.equals("translate")) {
System.out.println("translate ------------------------------------------------");
int size = child.size;
for (int i = 0; i < size; i++) {
JsonValue jsonValue1 = child.get(i);
JsonValue time = jsonValue1.get("time");
JsonValue x = jsonValue1.get("x");
JsonValue y = jsonValue1.get("y");
JsonValue curve = jsonValue1.get("curve");
Translate translate = new Translate();
translates.add(translate);
translate.time = time.asFloat();
translate.x = x.asFloat();
translate.y = y.asFloat();
/**
* 加入
*/
if (curve != null && curve.type() == JsonValue.ValueType.array) {
float[] floats = curve.asFloatArray();
System.out.println(curve);
BseInterpolation interpolation = new BseInterpolation(floats);
translate.bseInterpolation = interpolation;
}
}
} else if (child.name.equals("color")) {
System.out.println("color ------------------------------------------------");
int size = child.size;
for (int i = 0; i < size; i++) {
JsonValue jsonValue1 = child.get(i);
JsonValue time = jsonValue1.get("time");
JsonValue colorV = jsonValue1.get("color");
JsonValue curve = jsonValue1.get("curve");
MyColorAction myColorAction = new MyColorAction();
colors.add(myColorAction);
myColorAction.time = time.asFloat();
myColorAction.color = Color.valueOf(colorV.asString());
if (curve != null && curve.type() == JsonValue.ValueType.array) {
float[] floats = curve.asFloatArray();
BseInterpolation interpolation = new BseInterpolation(floats);
myColorAction.interpolation = interpolation;
}
}
} else if (child.name.equals("rotate")) {
System.out.println("rotate ------------------------------------------------");
int size = child.size;
for (int i = 0; i < size; i++) {
JsonValue jsonValue1 = child.get(i);
JsonValue time = jsonValue1.get("time");
JsonValue colorV = jsonValue1.get("angle");
JsonValue curve = jsonValue1.get("curve");
MyRotateAction myColorAction = new MyRotateAction();
rotates.add(myColorAction);
myColorAction.time = time.asFloat();
myColorAction.angle = colorV.asFloat();
if (curve != null && curve.type() == JsonValue.ValueType.array) {
float[] floats = curve.asFloatArray();
BseInterpolation interpolation = new BseInterpolation(floats);
myColorAction.interpolation = interpolation;
}
}
}else if (child.name.equals("scale")){
System.out.println("scale ------------------------------------------------");
int size = child.size;
for (int i = 0; i < size; i++) {
JsonValue jsonValue1 = child.get(i);
JsonValue time = jsonValue1.get("time");
JsonValue scX = jsonValue1.get("x");
JsonValue scY = jsonValue1.get("y");
JsonValue curve = jsonValue1.get("curve");
MyScaleAction myScaleAction = new MyScaleAction();
scales.add(myScaleAction);
myScaleAction.time = time.asFloat();
myScaleAction.x = scX.asFloat();
myScaleAction.y = scY.asFloat();
if (curve != null && curve.type() == JsonValue.ValueType.array) {
float[] floats = curve.asFloatArray();
BseInterpolation interpolation = new BseInterpolation(floats);
myScaleAction.interpolation = interpolation;
}
}
}
}
}
}
arrays.add(rotates);
arrays.add(translates);
arrays.add(colors);
}
return null;
}
public static void main(String[] args) throws IOException {
ReadJson readJson = new ReadJson();
readJson.readSkeletonData("E:\\rider\\rider\\Assets\\asset\\spine\\propSpeedUp.json");
System.out.println("");
}
}
网友评论