libgdx:[27]添加调试控制

2024-10-15 14:23:41

添加一些控制代码来调试我们添加的代码的功能

Adding game world's debug controls 添加游戏世界的调试控制

1、在开发过程中拥有嵌入程序内部的可以由程序直接操作的调试控制特性,将是非常有用的。Debugcontrols经常被玩家称作为作弊;虽然这是一个非常有弹性的术语。可以肯定的是这将使你做为一名开发者的人生更加有趣和轻松。只要你确保在发布你的游戏之前把所有的controls都移除或置为不可用状态,除非你希望你的玩家能够使用它们。有两个方法来处理input事件。我们将会简短地演示这两个方法应该在什么时候使用该如何使用它们。我们下面将要实现的调试控制将允许我们实现以下效果:四个方向任意移动我们选中的sprite重设游戏到初始化状态循环遍历sprite列表来选中其他的sprite

libgdx:[27]添加调试控制

2、三个动作中的第一个在遵循连续性方面完全不同于其他的两个,例如,当你想要完成一个move动作按下一个键,当那个键保持被按着的状态的时候你希望这个move动作被反复地执行。相反的其他两个事件表现出一次性事件的特性。因为你总不想当相应的按键被按下或许保持很长一段时间,每秒钟重设或者是遍历sprite列表数百次吧。

3、下面让我们来通过上面讲到的方法实现被选中的sprite的运动。下面这行worldcontroller中的代码,导入了一个新的类,这个类包含了所有libgdx支持的按键的常数值。importcom.badlogic.gdx.Input.Keys;

libgdx:[27]添加调试控制

4、然后添加下面的代码:。。。

5、新的代码在类里增加了两个新的方法:handleDebugInput()和moveSelectedSprite()。handleDebugInput()方法确保用户的可用的输入 在任何游戏逻辑之前被处理。否则,游戏循环中的更新和绘制会有一些延迟于用户输入时间的现象。这个方法通常把增量时间作为参数。

libgdx:[27]添加调试控制

6、它被使用是和在updatetestobjects中使用处于同样的目的,让更新和增量时间保持关系。作为预防措施,如果我们的游戏不是运行在桌面系统的话我们的调试控制的操作将被快速略过。如果我们的游戏只针对android平台我们在以后的任何时间就不必担心我们的调试代码遗留在游戏中。

7、Gdx.Input模块提供一个isKeyPressed方法,可以被用来确定一个按键是否处于按下的状态。你必须使用libgdx的Keys类的有效常数得到正确的结果。所以我们基本上都在这里问是否有任何可能的键组合,D,W和S目前 是否按下。如果某一个情况下返回了true说明这个键确实被按下啦,moveselectedsprite()将会被调用。这个方法要求两个值来表示我们期望的运动的方向和幅度,将要应用到被选择的sprite上。这里的大小是sprmovespeed有一个常量值:5米*deltatime,这意味着我们的sprite将会有效得以一个5米每秒的速度移动。

libgdx:[27]添加调试控制

8、现在可以在桌面项目运行你的游戏。按下adws中的任何一个键,在游戏世界中移动选中的sprite。下一个将要被实现的controls是:通过按键实现游戏世界的重设,并选中下一个sprite。又一次,添加另外一行代码到worldcontroller中导入新的类:。。。

9、InputAdapter类是一个InputListener接口的默认实现类。它提供各种方法来处理输入事件。我们将使用InputAdapter变量代替InputListener。当你知道你不必要实现其中的大部分方法接口时,这是一个很方便的方法。当然你也可以使用inputlistener接口,这也是完全有效的,这只是一个个人喜好的问题。从InputAdapter驱动WorldController 像下面这样改变已经存在的代码:。。。

10、Then, add the following code:然后添加如下代码:。。。

11、WorldController类从现在起提供第二个功能:作为一个listener接口的实例接收输入事件。Libgdx需要被告知输入事件将被发送到哪里。这个通过调用gdx。Input模块的setinputprocessor()实现,由于worldcontroller是我们的输入事件监听器,我们可以简单地把它传递给方法。

libgdx:[27]添加调试控制

12、现在libgdx将会把所有的输入事件发送给我们的监听器,我们需要切实地实现处理每一个我们关心的事件的处理器。对我们来说只是哪一个键被释放啦。这类事件将在keyup()中被处理。用下面的代码重写adapter默认实现的方法:。。。

13、这代码将检测键值中是否包括R键或是Space键的键值。如果是R键就执行worldcontroller的init()。这将导致游戏被重置,就像是游戏重启了一样。如果空格键被按下selectedsprite的索引就会被加上一。对于数组宽度的模运算是为了支持 当增加后的值 超出最大允许的值的情况。

14、现在在桌面项目中启动你的游戏。你可以通过按下R键重设游戏。对于每一次的重设操作检测精灵将shufflingaround。用空格键选择另外的精灵,原来被选择的精灵将会停止旋转,取而代之新选择的精灵将会开始旋转。你还可以通过键盘的ADWS键来移动精灵。

猜你喜欢