在Kotlin中使用libGDX

最近,我一直在阅读有关不同语言的信息,以及它们可以为已经拥挤的软件开发人员带来什么,而一种语言对我来说很突出: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。 最新的安装工具包含最新版本,但要手动执行,请打开定义所有依赖项的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"

注意: 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 "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

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

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

相关文章

【重学JS系列】slice用法大合集

让我们回顾下slice的日常用法slice 工作原理在深入研究一些更高级的用法之前,让我们看一下slice方法的基础知识。如MDN文档,slice 是数组上的一个方法,它最多有两个参数:arr.slice([begin[, end]])begin从该索引处开始提取原数组中的元素,如果…

【Github开源】一站搞定各种开发文档

开发者的苦恼:经常要在多个API文档中切换,浏览器书签栏收藏各种语言相关的接口说明文档。无意中在Github上发现DevDocs[1]这个开源项目,它是一个把所有开发相关的文档以web的形式做了一个综合的网站,并提供搜索,离线访…

javafx 表单_JavaFX 2:创建登录表单

javafx 表单在本教程中,我将使用JavaFX 2和CSS设计一个外观漂亮的Login Form 。 它是经典的登录表单,带有用户名和密码以及登录按钮。 为了遵循本教程,我强烈建议您查看以下这些教程: Eclipse IDE中的JavaFX 2入门 JavaFX 2&…

【详细教程】教你如何使用Node + Express + Typescript开发一个应用

Express是nodejs开发中普遍使用的一个框架,下面要谈的是如何结合Typescript去使用。 目标 我们的目标是能够使用Typescript快速开发我们的应用程序,而最终我们的应用程序却是编译为原始的JavaScript代码,以由nodejs运行时来执行。 初始化设置…

结构型模式 适配器模式

结构型模式 适配器模式 适用于: 是将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 /*** 结构型模式 适配器模式* Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可…

乐哥学AI_Python(二):Numpy索引,切片,常用函数

Numpy的索引和切片 ndarray对象的内容可以通过索引和切片查看和修改。 索引:ndarray对象中的元素索引基于0开始 切片:对数组里某个片段区域的描述 数组的切片也可以理解为原始数组的局部视图,都是指向内存中的原始数组,所以不同于…

仅使用HTML和CSS实现的标签云效果

标签云的效果在博客和网站上不难见到,它其实就是带有超链接的某些关键字,为了达到强调主题的作用。通常出现概率比较大或者受欢迎的标签文字显示比较大,相反的就显示的小。来源于TagCrowd.com我们就不去深入研究标签云带来的效率上的提升和可…

捍卫Java

因此,我们不时发布了一本电子书,名为“十大Java性能问题” 。 毫无例外,一些人回答说“问题是您正在使用Java”。 显然,Java一直在受到批评,人们已经预测了它的消亡已有一段时间了。 当然,它不像Python&am…

vuex的使用二

1.先看项目的目录结构 2.在main.js里需要引入store这个文件并挂在实例上 import store from ./store/store ............new Vue({el: #app,router,store,template: <App/>,components: { App } }) 3.store.js里引入action.js和mutation.js文件 // 状态管理器 import Vue…

收到短信验证码自动填充到表单,竟然是这么玩的

苹果系统上的App和网站可以实现来自短信的验证码自动填充表单的功能&#xff0c;通常你是怎么实现这个功能的&#xff1f;有一种实现方式可能你不知道&#xff0c;单纯的HTML标签就能实现&#xff0c;不需要任何的Javascript代码该特性第一次发布是在 WWDC 2018[1]&#xff1a;…

web实现数据交互的几种常见方式

前言在当今社会&#xff0c;作为一名前端程序猿&#xff0c;并不是一昧的去制作静态页面就可以满足滴&#xff1b;你说你会制作网页&#xff0c;好吧&#xff0c;只能说你算是一个前端程序猿。但这是你作为一个程序猿最基本的能力&#xff0c;并不会为你进行加分&#xff1b; 我…

【超详细教程】如何使用TypeScript和GraphQL开发应用

GraphQL是一个专为构建灵活的API而生的强大的查询语言。它允许您为数据定义类型系统&#xff0c;因此在执行查询时&#xff0c;它仅返回所需的数据。与TypeScript一起使用时&#xff0c;GraphQL可以为开发人员提供更好的体验&#xff0c;因为它们都是类型语言。TypeScript是Jav…

jpa jsf_完整Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分

jpa jsf托管豆 这篇文章是本教程第1部分的继续。 在“ com.mb”包中&#xff0c;您将需要创建以下类&#xff1a; package com.mb;import org.primefaces.context.RequestContext;import com.util.JSFMessageUtil;public class AbstractMB {private static final String KEEP…

【利好工具】JavaScript及时运行调试工具

今天要介绍的这个工具叫RunJS[1]&#xff0c;是运行在各大系统上的客户端&#xff0c;目前支持主流的macOS、Windows、Debian和Universal Linux平台。你可以在上面编写你的JavaScript或TypeScript代码&#xff0c;并且获得即时反馈。它的左边是代码区域&#xff0c;右边是输出结…

CIFAR-10 dataset 的下载与使用

基本信息 CIFAR-10 是一个包含60000张图片的数据集。其中每张照片为32*32的彩色照片&#xff0c;每个像素点包括RGB三个数值&#xff0c;数值范围 0 ~ 255。 所有照片分属10个不同的类别&#xff0c;分别是 airplane, automobile, bird, cat, deer, dog, frog, horse, ship, tr…

教你如何创建一款属于自己的VSCode主题

你有没有想过创建一款属于自己的VSCode主题&#xff1f;没有你想像的那么难&#xff0c;但是真正实现起来也不是那么轻松&#xff0c;需要你对将要去改变的主题的一些属性要有所了解和准备。如果你要想让你的主题适用于多种编程语言&#xff0c;并且看起来还很漂亮的话&#xf…

调试

http://www.cnblogs.com/CARPE-DIEM-wu/p/7798119.html 黄金规则 从帮助台得到的观点是不明确的 检查插头 不要想,而要看 回到目录制造失败 回到目录不要想,而要看 回到目录分而治之 回到目录一次只改一个地方 回到目录保持审计跟踪 回到目录检查插头 回到目录获得全新观点 回到…

【视频内含福利】原来手机套壳视频是这么做出来的

最近视频圈子里都在发这种视频&#xff0c;究竟是怎么做出来的&#xff1f;研究下来发现原来是用的这款名字叫Record Maker的APP&#xff0c;旨在帮助用户轻松快速给视频加上手机壳的效果。目前App Store上的版本是1.2.1&#xff0c;最近一次更新支持了iPhone11/iPhone12模型&a…

apache thrift_使用Java快速入门的Apache Thrift

apache thriftApache Thrift是由facebook创建的RPC框架&#xff0c;现在它是一个Apache项目。 Thrift允许您在不依赖语言的定义文件中定义数据类型和服务接口。 该定义文件用作编译器的输入&#xff0c;以生成用于构建通过不同编程语言进行通信的RPC客户端和服务器的代码。 您也…

前端八大灵感设计,代码变为现实

我们都知道掌握编程技术是一项很难的事情&#xff0c;没有捷径可走。需要我们在日复一日的工作中去锻炼。如果想要达到擅长甚至需要长年累月的积累。下面列举了一些可以给你带来编码灵感的例子&#xff0c;相信你看到会有想去写代码的冲动。因为一个好的工程师&#xff0c;是不…