KorGE Sprites
Table of contents:
Overview
Sprites are simple views that can play simple sequence-based animations. Instead of using Skeletal-based or tween-based animation, sprite animations are just a sequence of images, and the sprites just play them.
When using along a single atlas, you can have lots of these sprites visible at the same time at a decent framerate.
This page covers Sprite
and SpriteAnimation
as well as Atlas
Video-tutorials
Creating a SpriteAnimation
There are two ways of creating a SpriteAnimation
:
manually or selecting some frames from an Atlas
.
Manually creating a SpriteAnimation
val spriteMap = resourcesVfs["explosion.png"].readBitmap()
val explosionAnimation = SpriteAnimation(
spriteMap = spriteMap,
spriteWidth = 128,
spriteHeight = 128,
marginTop = 0,
marginLeft = 0,
columns = 8,
rows = 8,
offsetBetweenColumns = 0,
offsetBetweenRows = 0,
)
val explosion = sprite(explosionAnimation)
explosion.playAnimationLooped()
Creating a SpriteAnimation
using an Atlas
val adventurerSprite = resourcesVfs["adventurer.xml"].readAtlas()
val runAnimation = adventurerSprites.getSpriteAnimation(prefix = "run")
val jumpAnimation = adventurerSprites.getSpriteAnimation(prefix = "jump")
val standAnimation = adventurerSprites.getSpriteAnimation(prefix = "stand")
val adventurer = sprite(standAnimation)
adventurer.playAnimationLooped()
API
Sprite
DSL:
fun Container.sprite(initialAnimation: SpriteAnimation, anchorX: Double , anchorY: Double)
Sprite class:
open class Sprite(
bitmap: Bitmap /*| BmpSlice | SpriteAnimation*/,
anchorX: Double = 0.0,
anchorY: Double = anchorX,
hitShape: VectorPath? = null,
smoothing: Boolean = true
) : Image(bitmap, anchorX, anchorY, hitShape, smoothing) {
val onAnimationCompleted : Signal<SpriteAnimation>
val onAnimationStopped : Signal<SpriteAnimation>
val onAnimationStarted : Signal<SpriteAnimation>
var spriteDisplayTime: TimeSpan = 50.milliseconds
fun playAnimation(times: Int, spriteAnimation: SpriteAnimation?, spriteDisplayTime: TimeSpan, startFrame: Int, reversed: Boolean)
fun playAnimation(spriteAnimation: SpriteAnimation?, spriteDisplayTime: TimeSpan, startFrame: Int, reversed: Boolean)
fun playAnimationForDuration(duration: TimeSpan, spriteAnimation: SpriteAnimation?, spriteDisplayTime: TimeSpan, startFrame: Int, reversed: Boolean)
fun playAnimationLooped(spriteAnimation: SpriteAnimation?, spriteDisplayTime: TimeSpan, startFrame: Int, reversed: Boolean)
fun stopAnimation()
fun setFrame(index: Int)
}
SpriteAnimation class:
fun SpriteAnimation(sprites: List<BmpSlice>, defaultTimePerFrame: TimeSpan): SpriteAnimation
fun SpriteAnimation(
spriteMap: Bitmap,
spriteWidth: Int, spriteHeight: Int,
marginTop: Int, marginLeft: Int,
columns: Int, rows: Int,
offsetBetweenColumns: Int, offsetBetweenRows: Int
): SpriteAnimation
class SpriteAnimation {
val sprites: List<BmpSlice>
val defaultTimePerFrame: TimeSpan
val spriteStackSize: Int
val size: Int
val firstSprite: BmpSlice
fun getSprite(index: Int): BmpSlice
operator fun get(index: Int): BmpSlice
}
SpriteAnimation
from Atlas:
fun Atlas.getSpriteAnimation(prefix: String, defaultTimePerFrame: TimeSpan): SpriteAnimation
fun Atlas.getSpriteAnimation(regex: Regex, defaultTimePerFrame: TimeSpan): SpriteAnimation