最近,我一直在阅读有关不同语言的信息,以及它们可以为已经拥挤的软件开发人员带来什么,而一种语言对我来说很突出:Kotlin。 ( / )
这是一种相对较新的语言(成立于),而这些正是我选择其他众多成熟语言所使用的几个原因:
在JVM上运行并具有完全的Java互操作性 它既不是纯粹的OO也不是功能语言,它自然地适应了两种样式 它使用功能支持程序编程 它具有类型推断功能,并且支持可空和不可空数据类型 它的语法很漂亮,尤其是Pascal样式的变量声明(数据类型在变量之后) 非常简洁,我发现用Kotlin编写的代码可读性强
设置项目
我将按照Wiki( /libgdx/libgdx/wiki/Project-Setup-Gradle )中的建议和描述使用标准libGdx设置,其中Gradle作为构建工具,而IntelliJ作为IDE。
我将我的项目称为Nemo,因为它没有名称,这就是拉丁语中的“ nemo”(没有,没有人,没有人,没有名字)。 我们将看到它的去向。
创建项目后,将其导入到IDE中。 通常从根项目根目录导入/打开build.gradle
文件。
导入项目后,升级libGdx。 最新的安装工具包含最新版本,但要手动执行,请打开定义所有依赖项的build.gradle
根目录,并使用libGdx的最新版本。 最新版本可以在这里找到:/versions.html
将gdxVersion更改为最新版本,当前为1.8.0。
还要确保您的IDE已准备好用于Kotlin。
要设置IntelliJ,请按照此处的说明进行操作: https : ///docs/tutorials/getting-started.html
注意:要将插件升级到Kotlin的最新版本,我设法做到的唯一方法是卸载插件并重新添加。
对于eclipse用户,说明在这里: https : ///docs/tutorials/getting-started-eclipse.html
因为我们将Gradle用作构建工具,所以我们需要对其进行配置以使用kotlin插件来构建项目。 要做到这一点,kotlin-gradle
插件的依赖需要被添加到buildscript
主找到方法build.gralde
文件。
添加行
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0-beta-4584'
到主build.gradle
文件中的buildscript
依赖build.gradle
。
根build.gradle
文件应包含以下内容
buildscript {repositories {mavenCentral()maven { url "/content/repositories/snapshots/" }}dependencies {classpath 'com.android.tools.build:gradle:1.2.3'classpath 'org.robovm:robovm-gradle-plugin:1.12.0'classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0-beta-4584'}}
可以从位于Maven Central的Kotlin的存储库中获取版本号。 /artifact/org.jetbrains.kotlin/kotlin-gradle-plugin
可以在此处找到有关如何将Kotlin与Gradle结合使用的更多信息: https : ///docs/reference/using-gradle.html
为了定位JVM,需要应用Kotlin插件。
加
apply plugin: "kotlin"
到“核心”项目,因为我们将仅在“核心”中使用Kotlin。 还需要将Kotlin标准库添加到核心依赖项中。
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
注意:kotlinVersion
是在allProjects.ext
中的项目级别定义的。
allprojects {apply plugin: "eclipse"apply plugin: "idea"version = '1.0'ext {appName = "nemo"gdxVersion = '1.8.0'roboVMVersion = '1.12.0'box2DLightsVersion = '1.4'ashleyVersion = '1.7.0'aiVersion = '1.7.0'kotlinVersion = '1.0.0-beta-4584'}repositories {mavenCentral()maven { url "/content/repositories/snapshots/" }maven { url "/content/repositories/releases/" }}}
有关最新版本,请访问Kotlin网站。
核心项目设置应如下所示:
project(":core") {apply plugin: "java"apply plugin: "kotlin"dependencies {compile "com.badlogicgames.gdx:gdx:$gdxVersion"compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"}}
注意:突出显示的行包含更改。
Kotlin可以与Java混合使用,并且由于计划仅使用Kotlin,因此我们不会将Kotlin源提取到不同的目录中,而是将当前的Java逐步转换为Kotlin。 幸运的是,我们只有一个类可以转换。 我们可以通过几种方式做到这一点。 如果使用的是IntelliJ,最简单的方法是从“工具”菜单中选择类,然后选择“将Java文件转换为Kotlin文件”。
还有其他方法,例如,创建扩展名为.kt
的空文件,复制Java文件的内容并将其粘贴到新的.kt
文件中。 IntelliJ将提示您进行转换。
当然,只有安装并启用了Kotlin插件,所有这一切才有可能。
让我们检查一下由gdx设置应用程序生成的Nemo
类文件:
package net.obviam.nemo;import com.badlogic.gdx.ApplicationAdapter;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.graphics.GL20;import com.badlogic.gdx.graphics.Texture;import com.badlogic.gdx.graphics.g2d.SpriteBatch;public class Nemo extends ApplicationAdapter {SpriteBatch batch;Texture img;@Overridepublic void create () {batch = new SpriteBatch();img = new Texture("badlogic.jpg");}@Overridepublic void render () {Gdx.gl.glClearColor(1, 0, 0, 1);Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);batch.begin();batch.draw(img, 0, 0);batch.end();}}
以及生成的Kotlin文件:
package net.obviam.nemoimport com.badlogic.gdx.ApplicationAdapterimport com.badlogic.gdx.Gdximport com.badlogic.gdx.graphics.GL20import com.badlogic.gdx.graphics.Textureimport com.badlogic.gdx.graphics.g2d.SpriteBatchclass Nemo : ApplicationAdapter() {internal var batch: SpriteBatchinternal var img: Textureoverride fun create() {batch = SpriteBatch()img = Texture("badlogic.jpg")}override fun render() {Gdx.gl.glClearColor(1f, 0f, 0f, 1f)Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)batch.begin()batch.draw(img, 0f, 0f)batch.end()}}
自动转换不是完美的,如果我们编译该类,则会得到两个错误:
Error:(10, 4) Gradle: Property must be initialized or be abstractError:(9, 4) Gradle: Property must be initialized or be abstract
错误指的是突出显示的行(10和11)中的2个未初始化的类属性。
internal var batch: SpriteBatchinternal var img: Texture
在Kotlin中,必须在构造函数或类的init方法中初始化声明的non null
属性。 但是这样做,我们将不会使用libGdx生命周期方法,因此我们可以应用Kotlin的一项功能:Late Initialized Properties。 这是通过使用lateinit
修饰符实现的。
internal lateinit var batch: SpriteBatchinternal lateinit var img: Texture
这将标记属性以进行后期初始化,并且在初始化之前对属性的任何访问都将通过特殊异常来发出信号。
就是这样,我们有了Kotlin libGdx项目。 我们可以构建它并以通常的方式运行它。
最简单的方法是使用Gradle包装器从命令行运行它。 在项目的根目录中,执行以下命令(Linux,OSX):./gradlew desktop:run或在Windows gradlew.bat desktop:run上
或按照Wiki中的说明进行操作: https : ///libgdx/libgdx/wiki/Project-Setup-Gradle
应该会出现非常熟悉的引导程序屏幕。
接下来,我们将探讨游戏开发中的一些常见任务,以及如何使用Kotlin实现这些任务。
不断发展的项目可以在这里找到: https : ///obviam/kotlin-gdx-nemo
翻译自: //01/using-libgdx-kotlin.html