The Loop Start and Loop End feature in the Spine editor is designed for convenience while working on animations in the editor - it's primarily a tool to help you focus on a specific portion of your animation during the design process. However, it has some important limitations:
What Loop Start/End Does:
- It controls playback in the editor's timeline view
- It's useful when you want to work on and preview just a section of your animation
- It's also used by the Offset feature to determine wrap points when moving keys in looping animations
- It affects the Ghosting view to show ghosts past the start and end when looping
What It Doesn't Do:
- It's not stored per animation - it's a timeline-level setting
- It doesn't affect runtime playback - your exported animations will still contain all frames
- It's not designed to trim animations for export
For Your Runtime Looping Needs:
If you need to control which portion of an animation loops at runtime, you should use TrackEntry.animationStart and TrackEntry.animationEnd properties in your code. These are set on the TrackEntry returned by SetAnimation and AddAnimation calls in the Spine Runtimes.
About Your Last Frame Question:
Regarding your concern about the last frame: in a properly looping animation, the last frame is necessary for smooth interpolation back to the first frame. If your animation ends at frame 30, playback should tween from frame 29→30, then loop to 0→1. Frame 0 and frame 30 should be identical to create a seamless loop - the last frame provides the tweening data to smoothly transition back to the start.
If you're seeing issues with interpolation between the end and start of your loop, make sure your first and last keyframes have the same values for all animated properties.