java中使用kotlin_在Kotlin中使用libGDX

java中使用kotlin

最近,我一直在阅读有关不同语言的信息,以及它们可以为已经拥挤的软件开发人员带来什么,并且一种语言对我来说很突出:Kotlin。 ( https://kotlinlang.org/ )

这是一种相对较新的语言(成立于2011年),而这些正是我选择其他众多成熟语言所用的几个原因:

  • 在JVM上运行并具有完全的Java互操作性
  • 它既不是纯OO也不是功能语言,它自然地适应了两种样式
  • 它使用功能支持程序编程
  • 它具有类型推断功能,并且支持可空和不可空数据类型
  • 它的语法很漂亮,尤其是Pascal样式的变量声明(数据类型在变量之后)
  • 非常简洁,我发现用Kotlin编写的代码可读性强

设置项目

我将按照Wiki( https://github.com/libgdx/libgdx/wiki/Project-Setup-Gradle )中的建议和描述使用标准libGdx设置,其中Gradle作为构建工具,而IntelliJ作为IDE。

我将我的项目称为Nemo ,因为它没有名称,这就是拉丁语中的“ nemo” (没有,没有人,没有人,没有名字)。 我们将看到与它一起去的地方。

Screen-Shot-2016-01-19-at-13.49.30

创建项目后,将其导入到IDE中。 通常从根项目根目录导入/打开build.gradle文件。

Screen-Shot-2016-01-19-at-13.53.02

导入项目后,升级libGdx。 最新的安装工具包含最新版本,但要手动执行,请打开定义所有依赖项的root build.gradle文件,并使用最新版本的libGdx。 最新版本可以在这里找到:https://libgdx.badlogicgames.com/versions.html

Screen-Shot-2016-01-19-at-13.52.28

将gdxVersion更改为最新版本,当前为1.8.0。

还要确保您的IDE已准备好用于Kotlin。

要设置IntelliJ,请按照此处的说明进行操作: https : //kotlinlang.org/docs/tutorials/getting-started.html

注意:要将插件升级到Kotlin的最新版本,我设法做到的唯一方法是卸载插件并重新添加。

对于eclipse用户,说明在这里: https : //kotlinlang.org/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 "https://oss.sonatype.org/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的存储库中获取版本号。 http://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-gradle-plugin

有关如何将Kotlin与Gradle结合使用的更多信息,请参见: https : //kotlinlang.org/docs/reference/using-gradle.html

为了定位JVM,需要应用Kotlin插件。

apply plugin: "kotlin"

到“ 核心 ”项目,因为我们将仅在“ 核心 ”中使用Kotlin。 还需要将Kotlin标准库添加到核心依赖项中。

compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"

注意: kotlinVersionallProjects.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 "https://oss.sonatype.org/content/repositories/snapshots/" }maven { url "https://oss.sonatype.org/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.ApplicationAdapter
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.GL20
import com.badlogic.gdx.graphics.Texture
import 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:(9, 4) Gradle: Property must be initialized or be abstract
Error:(10, 4) Gradle: Property must be initialized or be abstract

错误指的是突出显示的行(10和11)中的2个未初始化的类属性。

internal var batch: SpriteBatch
internal var img: Texture

在Kotlin中,必须在构造函数或类的init方法中初始化声明的non null属性。 但是这样做,我们将不会使用libGdx生命周期方法,因此我们可以应用Kotlin的一项功能: Late Initialized Properties 。 这是通过使用lateinit修饰符实现的。

internal lateinit var batch: SpriteBatch
internal lateinit var img: Texture

这将标记属性以进行后期初始化,并且在初始化之前对属性的任何访问将通过特殊异常来发出信号。

就是这样,我们有了Kotlin libGdx项目。 我们可以构建它并以常规方式运行它。

最简单的方法是使用Gradle包装器从命令行运行它。 在项目的根目录中,执行以下命令(Linux,OSX):./gradlew desktop:run或在Windows gradlew.bat desktop:run上

或按照Wiki中的说明进行操作: https : //github.com/libgdx/libgdx/wiki/Project-Setup-Gradle

应该会出现非常熟悉的引导屏幕。

Screen-Shot-2016-01-19-at-16.37.50

接下来,我们将探索游戏开发中的一些常见任务,以及如何使用Kotlin来实现这些任务。

  • 不断发展的项目可以在这里找到: https : //github.com/obviam/kotlin-gdx-nemo

翻译自: https://www.javacodegeeks.com/2016/01/using-libgdx-kotlin.html

java中使用kotlin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

同时防服务器维修,加强服务器日常运维,避免宕机灾难发生

原标题:加强服务器日常运维,避免宕机灾难发生服务器作为我们日常网络的支撑,可以说是24小时的全天候运转。在这种无休止的“加班”的状态下,服务器必然容易出问题,一旦发生服务器宕机就会造成整个网络的瘫痪&#xff0…

basemap安装_【我是解决安装问题系列_1】Mac python basemap安装

「2020/3/21更新」 附basemap网盘下载地址⏬Python需要跳过的安装的坑太太太太多了!!!!!最近看《利用python进行数据分析》这本书,到可视化的部分,看着最后的例子地图挺酷炫的,跟着敲代码的过程中,发现有时候不是你不会写&#xf…

nfs服务器远程访问,NFS远程共享存储

原标题:NFS远程共享存储构建储NFS远程共享存因为NFS有很多功能,不同的功能需要使用不同的端口。因此NFS无法固定端口。而RPC会记录NFS端口的信息,这样就能够通过RPC实现服务端和客户端的RPC来沟通端口信息。那RPC和NFS之间又是如何之间相互通…

ntp服务器查看终端,使用命令行界面使用NTP服务器在Windows中同步时间 | MOS86

即使使用简单的3V锂电池(CR2032)关闭电脑,每台台式电脑也能保持正确的时间。但这不是一个可充电电池,所以一年左右就停止工作了。您可以轻松地替换此单元格,但更换单元后,必须使用NTP服务器更新时间,以便Windows PC保持…

concat合并的数组会有顺序么_JS 数组操作 记录 笔记

Array数组的方法Mutator方法————"突变方法"会改变数组自身的值;Accessor方法————"访问方法"不会改变数组自身的值;Iteration方法————"遍历的方法" Establish方法————"创建新方法"Mutator方法(会…

服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的

我们都知道SSL认证能够分成SSL双向认证和SSL单向认证。那么,什么是SSL双向认证?SSL双向认证过程又是怎样的?小编就在接下来的内容为各位详细讲述。什么叫SSL双向认证SSL双向认证则是需要是服务端需要客户端提供身份认证,只能是服务…

依赖: ros-melodic-desktop 但是它将不会被安装_npm系列之依赖管理

1. 版本控制npm依赖包使用语义化的版本号,让开发者可以从版本号中推测修改。版本号格式为:X.Y.ZX:代表主版本号,只有更新了不向下兼容的API时才需要修改Y:次版本号,当模块增加了向下兼容的功能时需要修改Z&…

怎么修改ipv4服务器,如何修改ipv4 wins 服务器地址

如何修改ipv4 wins 服务器地址 内容精选换一换IPv6的使用,可以有效弥补IPv4网络地址资源有限的问题。如果当前云服务器使用IPv4,那么启用IPv6后,云服务器可在双栈模式下运行,即云服务器可以拥有两个不同版本的IP地址:I…

python 追加到字典_使用Python读取,写入和解析JSON

JSON是用于数据交换的轻量级数据格式,可以很容易地被人类读取和写入,也可以由机器轻松解析和生成。它是一种完全独立于语言的文本格式。为了处理JSON数据,Python有一个名为的内置包json。示例: s {“ id”:01&#xff…

couchbase_适用于具有Couchbase和WildFly的多容器和多主机应用程序的Docker Machine,Swarm和Compose...

couchbase该博客将说明如何使用Docker创建部署在多个主机上的多容器应用程序。 这将使用Docker Machine,Swarm和Compose实现。 是的,这三个工具一起使这个博客变得更加有趣! 该图说明了关键组件: Docker Machine用于配置多个D…

云服务器可以文件服务器,云服务器 可以上传文件

云服务器 可以上传文件 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。本地磁盘映射(推荐使…

机智云代码移植_IoT开发者 | 基于STM32F103的机智云宠物屋外加4路继电器开源教程...

[ 写在前面 ]自智云社区开辟IoT开源项目专区以来,一直有IoT开发者在贡献案例。玛莉甄选了一些具有代表性的案例分享给IoT爱好者们,本文亦如此。若你有好的案例,想和IoT爱好者们分享,欢迎投稿,一经采纳,我们…

drools。drools_Drools:fireAllRules,fireUntilHalt和Timers内部代码清理的详细说明

drools。drools在六月,我们在博客上发布了一个新的内部状态机,用于管理用户,计时器和引擎线程之间的交互。 现在,我们对该代码进行了另一次大的内部清理,以使其更易于阅读和理解。 如前所述,所有操作&…

云服务器文件打包,云服务器文件打包

云服务器文件打包 内容精选换一换Winscp无法连接到服务器。SSH连接工具例如Xshell可以正常连接云服务器。其他SSH工具连接云服务器正常,但是Winscp无法连接到服务器。说明SSH服务是没有问题的,Winscp连接基于的是SFTP协议。查看/etc/ssh/sshd_config文件…

完全复制一个dict_Redis主从复制getshell技巧

Redis未授权漏洞常见的漏洞利用方式:Windows下,绝对路径写webshell 、写入启动项。Linux下,绝对路径写webshell 、公私钥认证获取root权限 、利用contrab计划任务反弹shell。基于Redis主从复制的机制,可以完美无损的将文件同步到…

pcl_openmap_OpenMap教程3 –使用MapHandler构建基本的地图应用程序–第2部分

pcl_openmap1.简介 在上一教程中,我们了解了MapHandler如何将各种组件连接在一起(更具体地说,是从MapHandlerChild派生的类)。 我们看到了如何以编程方式执行此操作,但是还有另一种声明性地使用openmap.properties 。 …

xy轴坐标图数字表示_【相机标定】四个坐标系之间的变换关系

点击上方“新机器视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达世界坐标系,相机坐标系,图像物理坐标系,像素坐标系之间的关系:首先看下几个坐标系在放在一块的样子:1&#xff…

设计模式的Java 8 Lambda表达式-策略设计模式

策略模式定义封装在通常称为Context的驱动程序类中的一系列算法,并使这些算法可互换。 它使算法易于互换,并提供了在特定时间选择适当算法的机制。 算法(策略)在运行时由客户端或上下文选择。 在与客户端交互期间,Con…

调用打印机_涨知识|你不知道的关于打印机的打印过程和打印机驱动的那些事...

以前一直以为打印很简单,不就是编辑好文件按个“打印”就行了?但其实打印过程可以复杂到你分分钟“怀疑人生”。你以为的打印过程可能是这样的 ↓。我们看到的打印过程然而,真正的打印过程是这样的 ↓。实际上的打印过程打印机打印一页文件或…

kite 使用 go_使用Apache Storm和Kite SDK Morphlines的可配置ETL处理

kite 使用 go从我担任软件工程师的第一天起,我总是听到很多方面的相同要求: “ 我们希望所有内容都可配置,我们希望在运行时更改所有内容,我们希望有一个可视化工具来应用所有这些逻辑,以便非开发人员使用和配置我们的…