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,一经查实,立即删除!

相关文章

单链表的各种操作

#include<iostream> #define _CRT_SECURE_NO_WARNINGS using namespace std; typedef int DATA;struct SNode //定义节点 {DATA data;SNode* pNext; }; class CList //创建一个链表类 {SNode* m_hHead; //链表初始化char m_name[20];public:CL…

linux双显卡配置_Linux系统怎么配置双显卡?

感谢脚本之家网友鸢一雨音 的投稿众所周知&#xff0c;自从高性能独立图形处理器出现之后&#xff0c;很多便携式计算机就会采取一种双显卡的设计&#xff1a;节能的核心图形处理器用于渲染常规的桌面环境&#xff0c;而高性能的独立图形处理器则负责渲染高需求的应用程序。这种…

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

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

java动态代理_Java动态代理

java动态代理代理是一种设计模式。 当我们想添加或修改现有类的某些功能时&#xff0c;我们创建并使用代理对象。 使用代理对象而不是原始对象。 通常&#xff0c;代理对象具有与原始对象相同的方法&#xff0c;并且在Java代理类中&#xff0c;通常会extend原始类。 代理具有原…

建立能持续处理请求的Server端改造

#include<iostream> #include<Windows.h> using namespace std;int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOCKET _sock ::socket(AF_INET, SOCK_STREAM,…

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

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

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

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

chameleon 算法_使用Chameleon,Shrinkwrap,Drone / Graphene与Arquillian进行Java EE集成测试...

chameleon 算法从我以前的帖子继续在这里 &#xff0c;我想我已经了解了Java EE和也的Arquillian&#xff0c;并测试了一些新的&#xff08;和令人兴奋的&#xff09;事&#xff0c;我想与大家分享。 但是&#xff0c;在开始之前&#xff0c;我想首先请您注意以下几点&#xf…

建立能持续处理请求的Client端改造

#include<iostream> #include<Windows.h> using namespace std;int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOCKET _sock ::socket(AF_INET, SOCK_STREAM,…

comparator 字符串比较大小_Java8 - 使用 Comparator.comparing 进行比较排序

使用外部比较器Comparator进行排序 当我们需要对集合的元素进行排序的时候,可以使用java.util.Comparator 创建一个比较器来进行排序。Comparator接口同样也是一个函数式接口,我们可以把使用lambda表达式。如下示例, package com.common; import java.util.*; import java.u…

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

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

java 中的指针_Java中的指针

java 中的指针Java中有指针吗&#xff1f; 简短的答案是“不&#xff0c;没有”&#xff0c;这对于许多开发人员来说似乎是显而易见的。 但是&#xff0c;为什么对其他人却不那么明显呢&#xff1f; http://stackoverflow.com/questions/1750106/how-can-i-use-pointers-in-ja…

发送结构化网络数据Server端

#include<iostream> #include<Windows.h> using namespace std;struct DataPack {int age;char name[32];};int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOC…

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

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

工厂模式理解_工厂模式

工厂模式理解工厂模式是一种创新的设计模式&#xff0c;其目的是提供一个接口&#xff0c;用于创建相关或相关对象的族&#xff0c;而无需指定其具体类。 创建逻辑封装在工厂中&#xff0c;该工厂提供创建逻辑的方法或将对象的创建委托给子类。 客户端不知道接口或类的不同实现…

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

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

发送结构化数据Client端

#include<iostream> #include<Windows.h> using namespace std;struct DataPack {int age;char name[32];};int main() {//初始化ws2_32.dllWORD ver MAKEWORD(2, 2);WSADATA wsaData;WSAStartup(ver, &wsaData);//对应WSACleanup的调用//1.建立一个socketSOC…

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

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

java编写代理服务器_如何编写Java代理

java编写代理服务器对于vmlens &#xff08;轻量级Java竞争条件捕获器&#xff09;&#xff0c;我们使用Java代理来跟踪字段访问。 这是我们学习的实现此类代理的经验教训。 开始 使用“静态公共静态无效值premain&#xff08;String args&#xff0c;Instrumentation inst&am…

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

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