В настоящее время я работаю с примерами из книги "Разработка Java-игр с LibGDX" Ли Стемкоски.Я хотел попробовать Kotlin и преобразовал код из главы 2 в Kotlin.
Я спрашиваю, является ли следующий код наилучшей практикой, поскольку кажется, что код Kotlin гораздо более громоздок (и не настолько хорош)) в качестве аналога Java.
package chapter2
import com.badlogic.gdx.Game
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.Input
import com.badlogic.gdx.graphics.GL20
import com.badlogic.gdx.graphics.Texture
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.math.Rectangle
class StarfishCollectorAlpha : Game() {
private lateinit var batch: SpriteBatch
private var turtleTexture: Texture? = null
private var turtleX: Float? = null
private var turtleY: Float? = null
private lateinit var turtleRectangle: Rectangle
private var starfishTexture: Texture? = null
private var starfishX: Float? = null
private var starfishY: Float? = null
private lateinit var starfishRectangle: Rectangle
private var oceanTexture: Texture? = null
private var winMessageTexture: Texture? = null
private var win: Boolean? = null
override fun create() {
batch = SpriteBatch()
turtleTexture = Texture(Gdx.files.internal("assets/turtle-1.png"))
turtleX = 20f
turtleY = 20f
turtleRectangle = Rectangle(
turtleX!!,
turtleY!!,
turtleTexture!!.width.toFloat(),
turtleTexture!!.height.toFloat()
)
starfishTexture = Texture(Gdx.files.internal("assets/starfish.png"))
starfishX = 380f
starfishY = 380f
starfishRectangle = Rectangle(
starfishX!!,
starfishY!!,
starfishTexture!!.width.toFloat(),
starfishTexture!!.height.toFloat()
)
oceanTexture = Texture(Gdx.files.internal("assets/water.jpg"))
winMessageTexture = Texture(Gdx.files.internal("assets/you-win.png"))
win = false
}
override fun render() {
// check user input
if (Gdx.input.isKeyPressed(Input.Keys.LEFT))
turtleX = turtleX!! - 1
if(Gdx.input.isKeyPressed(Input.Keys.RIGHT))
turtleX = turtleX!! + 1
if(Gdx.input.isKeyPressed(Input.Keys.UP))
turtleY = turtleY!! + 1
if(Gdx.input.isKeyPressed(Input.Keys.DOWN))
turtleY = turtleY!! - 1
// update turtle rectangle location
turtleRectangle.setPosition(turtleX!!, turtleY!!)
// checks win condition: Turtle must be overlapping starfish
if (turtleRectangle.overlaps(starfishRectangle))
win = true
// clear screen
Gdx.gl.glClearColor(0f, 0f, 0f, 1f)
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
// draw graphics
batch.begin()
batch.draw(oceanTexture, 0f, 0f)
if (!win!!)
batch.draw(starfishTexture, starfishX!!, starfishY!!)
batch.draw(turtleTexture, turtleX!!, turtleY!!)
if (win!!)
batch.draw(winMessageTexture, 180f, 180f)
batch.end()
}
}
Во-первых: версия Java определяет переменные, допускающие значения NULL, только в трех словах:
private Texture turtleTexture;
Во-вторых: вы должны явно преобразовать целые числа в числа с плавающей запятой с помощью Kotlin,Когда Java управляет этим для вас.
В-третьих: Для того, чтобы использовать переменные, определенные как обнуляемые, вы должны использовать двойные восклицательные знаки !!в конце, а также всякий раз, когда вы хотите изменить их.
Я хочу использовать Kotlin для разработки игр (LibGDX), но мне кажется (с моими ограниченными знаниями, возможно), что Java - лучший язык.
Пожалуйста, скажите мне, что мой код Kotlin - мусор, и что есть лучший способ изменить мой беспорядок.