libgdx和Kotlin –类[2D平台原型]

这篇文章是libgdx和Kotlin文章的后续文章。

我已经决定开发一个简单的2D平台程序的原型(沿着我的早期文章中的Star Assault进行介绍),但是我一直在使用和学习Kotlin,而不是Java。

对于本教程,该项目应处于上一篇文章的初始状态。 一个简单的libGdx Java项目变成了Kotlin项目。 我们将在我们的主要Game.kt文件(以前为Nemo.kt进行干扰。

初始状态的项目源可以在这里找到。

Kotlin不需要文件名与类名相同,甚至不需要与声明的包等效的目录结构中。

事不宜迟,这是代码的第一个更改。

主要类已从Nemo更改为Game ,因为我们将使用名称Nemo作为角色。
因此, Nemo.kt > Game.kt

...// imports omitted
class Game : ApplicationAdapter() {internal lateinit var batch: SpriteBatchinternal lateinit var img: Textureinternal lateinit var nemo: Nemooverride fun create() {batch = SpriteBatch()img = Texture("images/nemo_01.png")nemo = Nemo()}override fun render() {Gdx.gl.glClearColor(0f, 0f, 0f, 1f)Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)batch.begin()batch.draw(img, nemo.position.x, nemo.position.y)batch.end()}data class Nemo(val position: Vector2 = Vector2(0f, 0f))
}

突出显示的行显示更改。

  • #05 –声明类型为Nemo的属性nemo并将其标记为延迟初始化。
  • #09 –为纹理加载不同的gif(在github上查看项目)
  • #10 –实例化Nemo类。 这等效于java new Nemo();
  • #21 –此行创建一个具有一个属性的数据类,即libGdx中Vector2类型的位置,并且默认情况下将其设为new Vector2(0f,0f),以防我们在初始化时将其忽略。

数据类是一个数据容器类,其中包含生成的getterssetters如果属性为var而不是valequalshashCodetoString 。 请注意该属性的val限定符,这意味着该位置是final且不可变。 这意味着,一旦将向量分配给它,就无法对其进行修改。 向量的值可以修改 。 除非另有要求,否则最好使所有内容保持不变,并且Kotlin旨在将这种模式用作默认模式。

这是以下内容的简写:

public class Nemo {// val is the equivalent of final private final Vector2 position;// constructor with argumentpublic Nemo(Vector2 position) {this.position = position;}// default constructorpublic Nemo() {this.position = new Vector2(0f, 0f);}// getterpublic Vector2 getPosition() {return position;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Nemo nemo = (Nemo) o;return position != null ? position.equals(nemo.position) : nemo.position == null;}@Overridepublic int hashCode() {return position != null ? position.hashCode() : 0;}@Overridepublic String toString() {return "Nemo{" +"position=" + position +'}';}
}

整个类被嵌套在该类中的一行替换。 分号也不需要标记指令的结尾。

data class Nemo(val position: Vector2 = Vector2(0f, 0f))
  • #17 –该指令在Nemo保持的位置绘制先前加载的纹理。 等效的Java代码为:
    batch.draw(img, nemo.getPosition().getX(), nemo.getPosition().getY());

在Kotlin中,我们不需要指定getter或setter,我们在属性中使用点表示法。 所有这些都由编译器负责,并且推断出访问器方法。

nemo.getPosition().getX()

变成

nemo.position.x

尝试运行项目,以便我们可以看到结果:

游戏画面实战

游戏画面实战

现在就这样。 确保您查阅有关类的Kotlin文档,以了解有关它们的更多信息。

在下一部分中,我们将把Nemo变成动画和可移动的角色。

  • 在此处获取源代码

翻译自: https://www.javacodegeeks.com/2016/02/libgdx-kotlin-classes-2d-platformer-prototyping.html

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

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

相关文章

Python 基础 - 4.3 random模块

程序中有很多地方需要用到随机字符,比如登录网站的随机验证码,通过random模块可以很容易生成随机字符串 >>> random.randomrange(1,10) #返回1-10之间的一个随机数,不包括10 >>> random.randomint(1,10) #返回1-10之间的一…

java中的方法在哪里_Java中的本机方法是什么,应在哪里使用?

小编典典Java中的本机方法是什么,应在哪里使用?一旦看到一个小例子,就很清楚了:Main.java :public class Main {public native int intMethod(int i);public static void main(String[] args) {System.loadLibrary(&qu…

python下载大文件

1. wget def download_big_file_with_wget(url, target_file_name):"""使用wget下载大文件Note: 需要系统安装wget"""import osimport subprocessdownload_process subprocess.Popen(["wget", "-c", "-O", targe…

spring jmx_JMX和Spring –第2部分

spring jmx这篇文章从本教程的第1部分继续。 嗨,在我的上一篇文章中,我解释了如何通过Spring设置JMX服务器以及如何通过身份验证和授权保护对它的访问。 在本文中,我将展示如何实现一个简单的MBean,该MBean允许用户在运行时更改L…

java callable用法_在Java中使用Callable和Future

最近,我们正在开发一个监控仪表板,我们想要ping几个第三方服务器,只是为了检查它们的可用性,或者我们想要调用健康检查。我们正在对服务器进行一系列api调用,这些服务器的IP,用户名和密码被外部化为环境变量…

注意Java 8的[Pri​​mitive] Stream.iterate()中的递归

Tagir Valeev关于Stack Overflow的一个有趣问题最近引起了我的注意。 为了简短起见&#xff08;请阅读问题的详细信息&#xff09;&#xff0c;而以下代码则有效&#xff1a; public static Stream<Long> longs() {return Stream.iterate(1L, i ->1L longs().skip(i…

用java编写生产者消费者问题_用java代码实现生产者和消费者的问题

public class ThreadDemo12 {public static void main(String[] args) {goods gnew goods();Product pronew Product(g);Thread th1new Thread(pro);th1.start();Customer cusnew Customer(g);Thread th2new Thread(cus);th2.start();}}/*** 商品类* author Al菜菜**/class goo…

LeetCode:位运算实现加法

LeetCode&#xff1a;位运算实现加法 写在前面 位运算符 实现加法的思路 两个加数&#xff0c;比如5(101)和6(110)&#xff0c;如何不用加法就能得出两者之和呢&#xff1f; 我们知道二进制计算中&#xff0c;如果使用异或将会产生无进位的两者之和&#xff0c;而两数相与将会产…

[机器学习] 模型评价参数,准确率,召回率,F1-score

很久很久以前&#xff0c;我还是有个建筑梦的大二少年&#xff0c;有一天&#xff0c;讲图的老师看了眼我的设计图&#xff0c;说&#xff1a;“我觉得你这个设计做得很紧张”&#xff0c;当时我就崩溃&#xff0c;对紧张不紧张这样的评价标准理解无能。多年后我终于明白老师当…

Stackoverflow的见解:投票最多的是Spring 4问题

在Stackoverflow上对Spring 4问题进行最投票和回答最多的是什么&#xff1f; 以下是最常见的五个问题和解答。 Spring中的 Component&#xff0c; Controller&#xff0c; Repository和Service批注有什么区别&#xff0c;它们可以互换使用还是具有特定功能&#xff1f; Trans…

java记录登陆时间_Spring security如何实现记录用户登录时间功能

一、原理分析spring security提供了一个接口 AuthenticationSuccessHandler,该接口中只有一个方法&#xff0c;用来进行登录成功后的操作public interface AuthenticationSuccessHandler {/*** Called when a user has been successfully authenticated.** param request the r…

bzoj3680

$模拟退火$ $这种全局最优的问题用模拟退火$ $模拟退火就是每次向四周随机移动&#xff0c;移动的幅度和温度成正比&#xff0c;如果新的位置更优就接受&#xff0c;否则按一定概率接收&#xff0c;概率和温度成正比$ $最后稳定后再在最优解附近蹦跶几下看看有没有更好的$ $你问…

JLBH示例3 –吞吐量对延迟的影响

在这篇文章中&#xff1a; 关于吞吐量对延迟的影响的讨论 如何使用JLBH测量TCP回送 添加探针以测试TCP往返的两半 观察增加吞吐量对延迟的影响 了解必须降低吞吐量才能在高百分位数时获得良好的延迟。 在帖子中&#xff0c;我们看到了考虑协调遗漏的影响或测量延迟一次迭…

java 输入正整数n_java如何输入一个整数 c语言如何输入一个正整数N,再输入N个整数,按从小......

导航:网站首页 > java如何输入一个整数 c语言如何输入一个正整数N,再输入N个整数,按从小... java如何输入一个整数 c语言如何输入一个正整数N,再输入N个整数,按从小... 相关问题: 匿名网友: 可以通过”Scanner“函数 直接输入参数的形式,来实现输入语句,举例: impor…

fastJson去掉指定字段

public static String filterFieldsJson(Object src, Class<?> clazz, String... args) { SimplePropertyPreFilter filter new SimplePropertyPreFilter(clazz, args); return JSON.toJSONString(src, filter); }转载于:https://www.cnblogs.com/Eilen/p/8377953.html

maven依赖最佳实践_Maven最佳实践

maven依赖最佳实践尽管Maven提供了“配置之上的约定”解决方案&#xff0c;但是仍然有足够多的必要配置引起严重的头痛。 在这篇文章中&#xff0c;我将与您分享一些最佳实践&#xff0c;以简化对POM文件的维护。 请勿使用已弃用的引用&#xff0c;例如$ {artifactId}或$ {pom.…

PHP 异常处理

PHP 异常处理 异常用于在指定的错误发生时改变脚本的正常流程。 异常是什么 PHP 5 提供了一种新的面向对象的错误处理方法。 异常处理用于在指定的错误&#xff08;异常&#xff09;情况发生时改变脚本的正常流程。这种情况称为异常。 当异常被触发时&#xff0c;通常会发生&a…

如何使用Elixir和Phoenix快速入门构建CRUD REST API

这篇文章将展示如何使用Elixir和Phoenix框架构建REST API。 重点将是为持久化到Postgres数据库后端的模型提供CRUD&#xff08;创建&#xff0c;读取&#xff0c;更新&#xff0c;删除&#xff09;端点。 我应该警告你&#xff1b; 这是一个简单的例子。 但是&#xff0c;希望它…

01背包(修订版)

由于时间比较充裕&#xff0c;重新修订一部分。 这次把一些补充的放进来&#xff0c;其他的基础说明见后半部分 这些一共说明&#xff1a;01背包、完全背包、多重背包 将会详细说明。 三种背包混合、二维背包、分组背包、依赖背包、泛化背包 将大致说明。 01背包 如上次说明一…

java 马踏棋盘优化_我所知道的十大常用算法之马踏棋盘算法(深度搜索、贪心思想优化 )...

前言需求今天我们学习的是马踏棋盘算法&#xff0c;我们还是从一个场景里引入看看马踏棋盘算法也被称为骑士周游问题将马随机放在国际象棋的66棋盘Board0&#xff5e;5的某个方格中提示&#xff1a;马按走棋规则(马走日字)进行移动要求&#xff1a;每个方格只进入一次&#xff…