Add on-click interaction to box2d sample (#47)

This commit is contained in:
Tobse
2021-05-26 20:51:30 +02:00
committed by GitHub
parent 3b8ec9996c
commit 2b8ead1851
4 changed files with 59 additions and 28 deletions

View File

@@ -1,13 +1,13 @@
import com.soywiz.korge.gradle.*
import com.soywiz.korge.gradle.KorgeGradlePlugin
import com.soywiz.korge.gradle.korge
apply<KorgeGradlePlugin>()
korge {
id = "com.soywiz.sample1"
name = "Sample1"
name = "Box2D-Sample"
description = "A sample using Korge and the gradle plugin"
orientation = com.soywiz.korge.gradle.Orientation.LANDSCAPE
jvmMainClassName = "Sample1Kt"
//admob("ca-app-pub-xxxxxxxx~yyyyyy")

View File

@@ -1,17 +0,0 @@
//import com.soywiz.korge.admob.*
import com.soywiz.kds.*
import com.soywiz.korge.*
import com.soywiz.korge.box2d.*
import com.soywiz.korge.view.*
import com.soywiz.korgw.*
import com.soywiz.korim.color.*
import com.soywiz.korma.geom.*
import org.jbox2d.common.*
import org.jbox2d.dynamics.*
suspend fun main() = Korge(quality = GameWindow.Quality.PERFORMANCE, title = "My Awesome Box2D Game!") {
solidRect(20, 20, Colors.RED).position(100, 100).centered.rotation(30.degrees).registerBodyWithFixture(type = BodyType.DYNAMIC, density = 2, friction = 0.01)
solidRect(20, 20, Colors.RED).position(109, 75).centered.registerBodyWithFixture(type = BodyType.DYNAMIC)
solidRect(20, 20, Colors.RED).position(93, 50).centered.rotation((-15).degrees).registerBodyWithFixture(type = BodyType.DYNAMIC)
solidRect(400, 100, Colors.WHITE).position(100, 300).centered.registerBodyWithFixture(type = BodyType.STATIC, friction = 0.2)
}

View File

@@ -0,0 +1,16 @@
import com.soywiz.korge.Korge
import com.soywiz.korge.box2d.registerBox2dSupportOnce
import com.soywiz.korge.view.ktree.readKTree
import com.soywiz.korgw.GameWindow
import com.soywiz.korio.file.std.resourcesVfs
/**
* Not used in gradle run! Check `main.kt`.
*
* Uses a `ktree` asset which is editable in the [KorGE Visual Editor](https://korlibs.soywiz.com/korge/editor/).
*/
suspend fun main() =
Korge(width = 920, height = 720, quality = GameWindow.Quality.PERFORMANCE, title = "My Awesome Box2D Game!") {
registerBox2dSupportOnce()
addChild(resourcesVfs["restitution.ktree"].readKTree(views))
}

View File

@@ -1,10 +1,42 @@
import com.soywiz.korge.*
import com.soywiz.korge.box2d.*
import com.soywiz.korge.view.ktree.*
import com.soywiz.korgw.*
import com.soywiz.korio.file.std.*
import com.soywiz.korge.Korge
import com.soywiz.korge.box2d.registerBodyWithFixture
import com.soywiz.korge.input.onClick
import com.soywiz.korge.view.position
import com.soywiz.korge.view.rotation
import com.soywiz.korge.view.solidRect
import com.soywiz.korgw.GameWindow
import com.soywiz.korim.color.Colors
import com.soywiz.korma.geom.Angle
import com.soywiz.korma.geom.degrees
import org.jbox2d.dynamics.BodyType
import kotlin.random.Random
/**
* Interactive sample for the integrated [Box-2D](http://www.jbox2d.org) physic lib.
*
* Click on any place to span a new box!
*/
suspend fun main() = Korge(
width = 800, height = 800,
quality = GameWindow.Quality.PERFORMANCE, title = "My Awesome Box2D Game!"
) {
solidRect(50, 50, Colors.RED).position(400, 50).rotation(30.degrees)
.registerBodyWithFixture(type = BodyType.DYNAMIC, density = 2, friction = 0.01)
solidRect(50, 50, Colors.RED).position(300, 100).registerBodyWithFixture(type = BodyType.DYNAMIC)
solidRect(50, 50, Colors.RED).position(450, 100).rotation(15.degrees)
.registerBodyWithFixture(type = BodyType.DYNAMIC)
solidRect(600, 100, Colors.WHITE).position(100, 600).registerBodyWithFixture(
type = BodyType.STATIC,
friction = 0.2
)
onClick {
val pos = it.currentPosLocal
solidRect(50, 50, Colors.RED).position(pos.x, pos.y).rotation(randomAngle())
.registerBodyWithFixture(type = BodyType.DYNAMIC)
}
suspend fun main() = Korge(width = 920, height = 720, quality = GameWindow.Quality.PERFORMANCE, title = "My Awesome Box2D Game!") {
registerBox2dSupportOnce()
addChild(resourcesVfs["restitution.ktree"].readKTree(views))
}
fun randomAngle(): Angle = Random.nextInt(0, 90).degrees