Skip to content

Commit f7ed203

Browse files
committed
补充FXGL示例
1 parent 98e2176 commit f7ed203

File tree

4 files changed

+46
-31
lines changed

4 files changed

+46
-31
lines changed

demo/src/main/kotlin/com/icuxika/bittersweet/demo/MainApp.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ import com.icuxika.bittersweet.demo.MainApp.Companion.LOGGER
44
import com.icuxika.bittersweet.demo.controller.MainController
55
import com.icuxika.bittersweet.demo.system.Theme
66
import com.icuxika.bittersweet.extension.logger
7-
import io.github.palexdev.materialfx.theming.JavaFXThemes
8-
import io.github.palexdev.materialfx.theming.MaterialFXStylesheets
9-
import io.github.palexdev.materialfx.theming.UserAgentBuilder
107
import javafx.application.Application
118
import javafx.stage.Stage
129
import java.util.*
@@ -23,14 +20,6 @@ fun main(args: Array<String>) {
2320
class MainApp : Application() {
2421

2522
override fun start(primaryStage: Stage?) {
26-
UserAgentBuilder.builder()
27-
.themes(JavaFXThemes.MODENA)
28-
.themes(MaterialFXStylesheets.forAssemble(false))
29-
.setDeploy(true)
30-
.setResolveAssets(true)
31-
.build()
32-
.setGlobal()
33-
3423
val mainView = AppView(MainController::class)
3524

3625
primaryStage?.apply {

demo/src/main/kotlin/com/icuxika/bittersweet/demo/controller/FXGLController.kt

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ package com.icuxika.bittersweet.demo.controller
22

33
import com.almasb.fxgl.app.GameApplication
44
import com.almasb.fxgl.app.GameSettings
5-
import com.almasb.fxgl.dsl.FXGL
6-
import com.almasb.fxgl.dsl.components.view.TextViewComponent
7-
import com.almasb.fxgl.entity.Entity
5+
import com.almasb.fxgl.core.math.FXGLMath
6+
import com.almasb.fxgl.dsl.*
87
import com.icuxika.bittersweet.demo.annotation.AppFXML
98
import javafx.fxml.FXML
109
import javafx.fxml.Initializable
@@ -14,7 +13,9 @@ import javafx.scene.layout.BorderPane
1413
import javafx.scene.layout.HBox
1514
import javafx.scene.layout.StackPane
1615
import javafx.scene.paint.Color
16+
import javafx.scene.shape.Circle
1717
import javafx.scene.shape.Rectangle
18+
import javafx.util.Duration
1819
import java.net.URL
1920
import java.util.*
2021

@@ -27,7 +28,10 @@ class FXGLController : Initializable {
2728
@FXML
2829
private lateinit var container: BorderPane
2930

30-
lateinit var player: Entity
31+
enum class Type {
32+
DROPLET,
33+
BUCKET
34+
}
3135

3236
override fun initialize(p0: URL?, p1: ResourceBundle?) {
3337
container.top = HBox(Label("FXGL演示")).apply {
@@ -38,15 +42,40 @@ class FXGLController : Initializable {
3842
children.add(
3943
GameApplication.embeddedLaunch(object : GameApplication() {
4044
override fun initSettings(settings: GameSettings?) {
45+
settings?.let {
46+
it.isProfilingEnabled = false
47+
}
4148
}
4249

4350
override fun initGame() {
44-
player = FXGL.entityBuilder()
45-
.at(10.0, 10.0)
46-
.view(Rectangle(36.0, 36.0, Color.DODGERBLUE))
47-
.with(TextViewComponent(0.0, 64.0, "人物名字"))
48-
.view("application.png")
51+
val bucket = entityBuilder()
52+
.type(Type.BUCKET)
53+
.at(getAppWidth() / 2.0, getAppHeight() - 200.0)
54+
.viewWithBBox(Rectangle(80.0, 200.0, Color.DODGERBLUE))
55+
.collidable()
4956
.buildAndAttach()
57+
bucket.xProperty().bind(getInput().mouseXWorldProperty())
58+
59+
FXGL.run({
60+
entityBuilder()
61+
.type(Type.DROPLET)
62+
.at(FXGLMath.random(0, getAppWidth() - 64).toDouble(), 0.0)
63+
.viewWithBBox(Circle(12.0, 12.0, 12.0, Color.BLACK))
64+
.collidable()
65+
.buildAndAttach()
66+
}, Duration.seconds(1.0))
67+
68+
}
69+
70+
override fun onUpdate(tpf: Double) {
71+
getGameWorld().getEntitiesByType(Type.DROPLET)
72+
.forEach { droplet -> droplet.translateY(100 * tpf) }
73+
}
74+
75+
override fun initPhysics() {
76+
onCollisionBegin(Type.BUCKET, Type.DROPLET) { bucket, droplet ->
77+
droplet.removeFromWorld()
78+
}
5079
}
5180
}).apply {
5281
prefWidthProperty().bind(fxglPaneContainer.widthProperty())

demo/src/main/kotlin/com/icuxika/bittersweet/demo/controller/MainController.kt

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,16 @@ import com.icuxika.bittersweet.demo.system.Theme
99
import com.icuxika.bittersweet.demo.util.FileDownloader
1010
import com.icuxika.bittersweet.dsl.onAction
1111
import com.icuxika.bittersweet.extension.logger
12-
import io.github.palexdev.materialfx.controls.MFXButton
13-
import io.github.palexdev.materialfx.controls.MFXProgressBar
14-
import io.github.palexdev.materialfx.enums.ButtonType
1512
import javafx.beans.property.SimpleBooleanProperty
1613
import javafx.beans.property.SimpleDoubleProperty
1714
import javafx.collections.FXCollections
1815
import javafx.fxml.FXML
1916
import javafx.fxml.Initializable
20-
import javafx.geometry.Insets
2117
import javafx.geometry.Pos
2218
import javafx.scene.control.*
23-
import javafx.scene.layout.*
19+
import javafx.scene.layout.BorderPane
20+
import javafx.scene.layout.StackPane
21+
import javafx.scene.layout.VBox
2422
import javafx.scene.paint.Color
2523
import javafx.stage.Stage
2624
import javafx.util.Callback
@@ -58,14 +56,11 @@ class MainController : Initializable {
5856
}
5957

6058
container.center = VBox(
61-
MFXProgressBar().apply {
59+
ProgressBar().apply {
6260
progressProperty().bind(progressProperty)
6361
},
64-
MFXButton("下载").apply {
62+
Button("下载").apply {
6563
styleClass.add("test-button")
66-
buttonType = ButtonType.FLAT
67-
textFill = Color.WHITE
68-
background = Background(BackgroundFill(Color.DODGERBLUE, CornerRadii(4.0), Insets.EMPTY))
6964
onAction {
7065
scope.launch {
7166
val fileURL =
@@ -102,6 +97,7 @@ class MainController : Initializable {
10297
null
10398
} else {
10499
Label().apply {
100+
textFill = Color.BLACK
105101
textProperty().bind(AppResource.getLanguageBinding(item.value))
106102
}
107103
}
@@ -130,6 +126,7 @@ class MainController : Initializable {
130126
else -> throw IllegalArgumentException("不支持的语言[${item.displayName}]")
131127
}
132128
Label().apply {
129+
textFill = Color.BLACK
133130
textProperty().bind(AppResource.getLanguageBinding(key))
134131
}
135132
}

demo/src/main/resources/com/icuxika/bittersweet/demo/fxml/fxgl.fxml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<?import javafx.scene.layout.BorderPane?>
44
<?import javafx.scene.layout.StackPane?>
55
<StackPane fx:id="rootContainer" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
6-
prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1"
6+
prefHeight="768.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1"
77
fx:controller="com.icuxika.bittersweet.demo.controller.FXGLController">
88
<children>
99
<BorderPane fx:id="container" prefHeight="200.0" prefWidth="200.0"/>

0 commit comments

Comments
 (0)