From 87d53819407458e891d23dd6bb8ff5b1bfc9bf30 Mon Sep 17 00:00:00 2001 From: Nicolai Emig Date: Wed, 13 May 2020 21:34:28 +0200 Subject: [PATCH] Added SpriteAnimation sampe for reference (#13) * Added SpriteAnimation sampe for reference * Added SpriteAnimation sampe for reference * Added SpriteAnimation sample for reference. Review 2 --- sample-spriteAnimation/build.gradle.kts | 10 ++ .../src/commonMain/kotlin/Main.kt | 88 ++++++++++++++++++ .../src/commonMain/resources/character.png | Bin 0 -> 3974 bytes 3 files changed, 98 insertions(+) create mode 100644 sample-spriteAnimation/build.gradle.kts create mode 100644 sample-spriteAnimation/src/commonMain/kotlin/Main.kt create mode 100644 sample-spriteAnimation/src/commonMain/resources/character.png diff --git a/sample-spriteAnimation/build.gradle.kts b/sample-spriteAnimation/build.gradle.kts new file mode 100644 index 0000000..1abb3e0 --- /dev/null +++ b/sample-spriteAnimation/build.gradle.kts @@ -0,0 +1,10 @@ +import com.soywiz.korge.gradle.* + +apply() + +korge { + id = "com.soywiz.sampleSpriteAnimation" + name = "SampleSpriteAnimation" + description = "A sample using Korge and the gradle plugin" + orientation = com.soywiz.korge.gradle.Orientation.LANDSCAPE +} diff --git a/sample-spriteAnimation/src/commonMain/kotlin/Main.kt b/sample-spriteAnimation/src/commonMain/kotlin/Main.kt new file mode 100644 index 0000000..9dda752 --- /dev/null +++ b/sample-spriteAnimation/src/commonMain/kotlin/Main.kt @@ -0,0 +1,88 @@ +import com.soywiz.klock.* +import com.soywiz.korev.* +import com.soywiz.korge.* +import com.soywiz.korge.input.* +import com.soywiz.korge.view.* +import com.soywiz.korim.bitmap.* +import com.soywiz.korim.format.* +import com.soywiz.korio.file.std.* + +suspend fun main() = Korge(width = 512, height = 512) { + val spriteMap = resourcesVfs["gfx/character/character.png"].readBitmap() + + + val spriteAnimationLeft = SpriteAnimation( + spriteMap = spriteMap, + spriteWidth = 16, + spriteHeight = 32, + marginTop = 96, + marginLeft = 1, + columns = 4, + rows = 1 + ) + + val spriteAnimationRight = SpriteAnimation( + spriteMap = spriteMap, + spriteWidth = 16, + spriteHeight = 32, + marginTop = 32, + marginLeft = 1, + columns = 4, + rows = 1 + ) + + val spriteAnimationUp = SpriteAnimation( + spriteMap = spriteMap, + spriteWidth = 16, + spriteHeight = 32, + marginTop = 64, + marginLeft = 1, + columns = 4, + rows = 1 + ) + + val spriteAnimationDown = SpriteAnimation( + spriteMap = spriteMap, + spriteWidth = 16, + spriteHeight = 32, + marginTop = 0, + marginLeft = 1, + columns = 4, + rows = 1 + ) + + val player1 = Sprite(spriteAnimationDown).apply { + scale(3) + xy(100,200) + } + val player2 = Sprite(spriteAnimationDown).apply { + scale(3) + xy(100,100) + } + + addChild(player1) + addChild(player2) + + + keys { + onKeyDown{ + when (it.key){ + Key.LEFT -> {player1.playAnimation(spriteAnimationLeft); player1.x-=2 } + Key.RIGHT ->{ player1.playAnimation(spriteAnimationRight); player1.x+=2} + Key.DOWN -> {player1.playAnimation(spriteAnimationDown); player1.y+=2} + Key.UP -> {player1.playAnimation(spriteAnimationUp); player1.y-=2} + Key.A -> {player2.playAnimation(spriteAnimationLeft); player2.x-=2 } + Key.D ->{ player2.playAnimation(spriteAnimationRight); player2.x+=2} + Key.S -> {player2.playAnimation(spriteAnimationDown); player2.y+=2} + Key.W -> {player2.playAnimation(spriteAnimationUp); player2.y-=2} + Key.L -> {player1.playAnimationLooped(spriteAnimationDown, 100.milliseconds)} + Key.T -> {player1.playAnimation(spriteAnimation = spriteAnimationDown, times = 3, spriteDisplayTime = 200.milliseconds)} + Key.C -> {player1.playAnimationForDuration(1.seconds, spriteAnimationDown); player1.y-=2} + Key.ESCAPE -> {player1.stopAnimation()} + + + else -> {} + } + } + } +} diff --git a/sample-spriteAnimation/src/commonMain/resources/character.png b/sample-spriteAnimation/src/commonMain/resources/character.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3d2286ef29108a42670eaaf6af3057c8b77619 GIT binary patch literal 3974 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 TMY+YSzc9eW0IZMIdl>ycE5i)( literal 0 HcmV?d00001