mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-07 03:06:55 +08:00
spine-libgdx, added flip timelines.
This commit is contained in:
parent
1e7eba5bcb
commit
60ab9d5fa8
@ -46,6 +46,8 @@ import com.esotericsoftware.spine.Animation.CurveTimeline;
|
|||||||
import com.esotericsoftware.spine.Animation.DrawOrderTimeline;
|
import com.esotericsoftware.spine.Animation.DrawOrderTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.EventTimeline;
|
import com.esotericsoftware.spine.Animation.EventTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.FfdTimeline;
|
import com.esotericsoftware.spine.Animation.FfdTimeline;
|
||||||
|
import com.esotericsoftware.spine.Animation.FlipXTimeline;
|
||||||
|
import com.esotericsoftware.spine.Animation.FlipYTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.IkConstraintTimeline;
|
import com.esotericsoftware.spine.Animation.IkConstraintTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.RotateTimeline;
|
import com.esotericsoftware.spine.Animation.RotateTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.ScaleTimeline;
|
import com.esotericsoftware.spine.Animation.ScaleTimeline;
|
||||||
@ -66,10 +68,6 @@ public class SkeletonBinary {
|
|||||||
static public final int TIMELINE_TRANSLATE = 2;
|
static public final int TIMELINE_TRANSLATE = 2;
|
||||||
static public final int TIMELINE_ATTACHMENT = 3;
|
static public final int TIMELINE_ATTACHMENT = 3;
|
||||||
static public final int TIMELINE_COLOR = 4;
|
static public final int TIMELINE_COLOR = 4;
|
||||||
static public final int TIMELINE_EVENT = 5;
|
|
||||||
static public final int TIMELINE_DRAWORDER = 6;
|
|
||||||
static public final int TIMELINE_FFD = 7;
|
|
||||||
static public final int TIMELINE_IK = 8;
|
|
||||||
|
|
||||||
static public final int CURVE_LINEAR = 0;
|
static public final int CURVE_LINEAR = 0;
|
||||||
static public final int CURVE_STEPPED = 1;
|
static public final int CURVE_STEPPED = 1;
|
||||||
@ -476,6 +474,28 @@ public class SkeletonBinary {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Flip timelines.
|
||||||
|
int flipCount = input.readInt(true);
|
||||||
|
if (flipCount > 0) {
|
||||||
|
FlipXTimeline timeline = new FlipXTimeline(flipCount);
|
||||||
|
for (int i = 0; i < flipCount; i++) {
|
||||||
|
float time = input.readFloat();
|
||||||
|
timeline.setFrame(i, time, input.readBoolean());
|
||||||
|
}
|
||||||
|
timelines.add(timeline);
|
||||||
|
duration = Math.max(duration, timeline.getFrames()[flipCount * 2 - 2]);
|
||||||
|
}
|
||||||
|
flipCount = input.readInt(true);
|
||||||
|
if (flipCount > 0) {
|
||||||
|
FlipYTimeline timeline = new FlipYTimeline(flipCount);
|
||||||
|
for (int i = 0; i < flipCount; i++) {
|
||||||
|
float time = input.readFloat();
|
||||||
|
timeline.setFrame(i, time, input.readBoolean());
|
||||||
|
}
|
||||||
|
timelines.add(timeline);
|
||||||
|
duration = Math.max(duration, timeline.getFrames()[flipCount * 2 - 2]);
|
||||||
|
}
|
||||||
|
|
||||||
// Draw order timeline.
|
// Draw order timeline.
|
||||||
int drawOrderCount = input.readInt(true);
|
int drawOrderCount = input.readInt(true);
|
||||||
if (drawOrderCount > 0) {
|
if (drawOrderCount > 0) {
|
||||||
|
|||||||
@ -30,12 +30,23 @@
|
|||||||
|
|
||||||
package com.esotericsoftware.spine;
|
package com.esotericsoftware.spine;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
|
import com.badlogic.gdx.graphics.Color;
|
||||||
|
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
|
||||||
|
import com.badlogic.gdx.utils.Array;
|
||||||
|
import com.badlogic.gdx.utils.FloatArray;
|
||||||
|
import com.badlogic.gdx.utils.IntArray;
|
||||||
|
import com.badlogic.gdx.utils.JsonReader;
|
||||||
|
import com.badlogic.gdx.utils.JsonValue;
|
||||||
|
import com.badlogic.gdx.utils.SerializationException;
|
||||||
import com.esotericsoftware.spine.Animation.AttachmentTimeline;
|
import com.esotericsoftware.spine.Animation.AttachmentTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.ColorTimeline;
|
import com.esotericsoftware.spine.Animation.ColorTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.CurveTimeline;
|
import com.esotericsoftware.spine.Animation.CurveTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.DrawOrderTimeline;
|
import com.esotericsoftware.spine.Animation.DrawOrderTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.EventTimeline;
|
import com.esotericsoftware.spine.Animation.EventTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.FfdTimeline;
|
import com.esotericsoftware.spine.Animation.FfdTimeline;
|
||||||
|
import com.esotericsoftware.spine.Animation.FlipXTimeline;
|
||||||
|
import com.esotericsoftware.spine.Animation.FlipYTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.IkConstraintTimeline;
|
import com.esotericsoftware.spine.Animation.IkConstraintTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.RotateTimeline;
|
import com.esotericsoftware.spine.Animation.RotateTimeline;
|
||||||
import com.esotericsoftware.spine.Animation.ScaleTimeline;
|
import com.esotericsoftware.spine.Animation.ScaleTimeline;
|
||||||
@ -49,15 +60,6 @@ import com.esotericsoftware.spine.attachments.BoundingBoxAttachment;
|
|||||||
import com.esotericsoftware.spine.attachments.MeshAttachment;
|
import com.esotericsoftware.spine.attachments.MeshAttachment;
|
||||||
import com.esotericsoftware.spine.attachments.RegionAttachment;
|
import com.esotericsoftware.spine.attachments.RegionAttachment;
|
||||||
import com.esotericsoftware.spine.attachments.SkinnedMeshAttachment;
|
import com.esotericsoftware.spine.attachments.SkinnedMeshAttachment;
|
||||||
import com.badlogic.gdx.files.FileHandle;
|
|
||||||
import com.badlogic.gdx.graphics.Color;
|
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
|
|
||||||
import com.badlogic.gdx.utils.Array;
|
|
||||||
import com.badlogic.gdx.utils.FloatArray;
|
|
||||||
import com.badlogic.gdx.utils.IntArray;
|
|
||||||
import com.badlogic.gdx.utils.JsonReader;
|
|
||||||
import com.badlogic.gdx.utils.JsonValue;
|
|
||||||
import com.badlogic.gdx.utils.SerializationException;
|
|
||||||
|
|
||||||
public class SkeletonJson {
|
public class SkeletonJson {
|
||||||
private final AttachmentLoader attachmentLoader;
|
private final AttachmentLoader attachmentLoader;
|
||||||
@ -458,6 +460,26 @@ public class SkeletonJson {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Flip timelines.
|
||||||
|
JsonValue flipMap = map.get("flipx");
|
||||||
|
if (flipMap != null) {
|
||||||
|
FlipXTimeline timeline = new FlipXTimeline(flipMap.size);
|
||||||
|
int frameIndex = 0;
|
||||||
|
for (JsonValue valueMap = flipMap.child; valueMap != null; valueMap = valueMap.next)
|
||||||
|
timeline.setFrame(frameIndex++, valueMap.getFloat("time"), valueMap.getBoolean("x", false));
|
||||||
|
timelines.add(timeline);
|
||||||
|
duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 2 - 2]);
|
||||||
|
}
|
||||||
|
flipMap = map.get("flipy");
|
||||||
|
if (flipMap != null) {
|
||||||
|
FlipYTimeline timeline = new FlipYTimeline(flipMap.size);
|
||||||
|
int frameIndex = 0;
|
||||||
|
for (JsonValue valueMap = flipMap.child; valueMap != null; valueMap = valueMap.next)
|
||||||
|
timeline.setFrame(frameIndex++, valueMap.getFloat("time"), valueMap.getBoolean("y", false));
|
||||||
|
timelines.add(timeline);
|
||||||
|
duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 2 - 2]);
|
||||||
|
}
|
||||||
|
|
||||||
// Draw order timeline.
|
// Draw order timeline.
|
||||||
JsonValue drawOrdersMap = map.get("draworder");
|
JsonValue drawOrdersMap = map.get("draworder");
|
||||||
if (drawOrdersMap != null) {
|
if (drawOrdersMap != null) {
|
||||||
|
|||||||
@ -202,16 +202,17 @@ public class SkeletonViewer extends ApplicationAdapter {
|
|||||||
|
|
||||||
delta = Math.min(delta, 0.032f) * ui.speedSlider.getValue();
|
delta = Math.min(delta, 0.032f) * ui.speedSlider.getValue();
|
||||||
skeleton.update(delta);
|
skeleton.update(delta);
|
||||||
|
skeleton.setFlip(ui.flipXCheckbox.isChecked(), ui.flipYCheckbox.isChecked());
|
||||||
if (!ui.pauseButton.isChecked()) {
|
if (!ui.pauseButton.isChecked()) {
|
||||||
state.update(delta);
|
state.update(delta);
|
||||||
state.apply(skeleton);
|
state.apply(skeleton);
|
||||||
|
ui.flipXCheckbox.setChecked(skeleton.getFlipX());
|
||||||
|
ui.flipYCheckbox.setChecked(skeleton.getFlipY());
|
||||||
}
|
}
|
||||||
skeleton.setPosition(skeletonX, skeletonY);
|
skeleton.setPosition(skeletonX, skeletonY);
|
||||||
// skeleton.setPosition(0, 0);
|
// skeleton.setPosition(0, 0);
|
||||||
// skeleton.getRootBone().setX(skeletonX);
|
// skeleton.getRootBone().setX(skeletonX);
|
||||||
// skeleton.getRootBone().setY(skeletonY);
|
// skeleton.getRootBone().setY(skeletonY);
|
||||||
skeleton.setFlipX(ui.flipXCheckbox.isChecked());
|
|
||||||
skeleton.setFlipY(ui.flipYCheckbox.isChecked());
|
|
||||||
skeleton.updateWorldTransform();
|
skeleton.updateWorldTransform();
|
||||||
|
|
||||||
batch.begin();
|
batch.begin();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user