如果要将
javax.swing游戏移植到libgdx,则必须知道如何制作游戏。您将逻辑和视图分开了吗?如果是,那么您只需重写视图即可。如果不是,那么,最好从头开始。首先要了解的知识:游戏的入口点是
ApplicationListener接口。如果您不需要其中的所有方法,都可以使用extend
Game,这会给您带来一些好处。所以我建议使用它。的
Game或
ApplicationListener现在为您提供了可能性,对一些应用程序的事件做出反应:
create()
:在您的应用启动时调用dispose()
:在游戏关闭时调用(未崩溃:P)pause()
:在android上调用,当按下“来电” /“归属”按钮时。在桌面上,当您最小化窗口时/游戏失去焦点时。resume()
:在暂停状态后返回时调用。resize()
:当您调整窗口大小并在android上,当屏幕旋转时调用(必须在清单文件中允许它)render()
:称为每个游戏循环(如果启用),用于更新游戏中的对象,然后将其绘制到屏幕上。
类中的默认render()实现
Game调用current的render
Screen。
屏幕?那是什么?好吧,考虑一个正常的游戏。你启动它,它showes菜单,有一些按键喜欢
StartGame,
Settings…这是菜单画面。所以
Screens是游戏中具有不同逻辑和视图的部分,因此它们必须位于单独的类中。
Screen实现
Screen接口,它再次为您提供了一些有用的方法:
show()
:叫,当此项设定Screen
为Game
小号Screen
带MyGdxGame.setScreen()
。hide()
:在将另一个Screen
设置为Game
s 时调用Screen
。
因此,如果当前
Screen是
MenuScreen和我按下
PlayGame按钮,
show()为
PlayScreen被调用,
hide()对于
MenuScreen被调用。该
Screen也有方法
pause(),
resume()并且
resize(),这是所谓的如果同样的方法
Game被称为(总是只对当前屏幕)。如果实现
ApplicationListener,则必须自己编写此默认行为。
请注意,
dispose()对于
Screen不会自动调用。
接下来是图纸。对于2D绘图,有:
ShapeRenderer
,大多数时间仅用于调试。它可以渲染简单的形状,例如圆形,正方形…SpriteBatch
,用于呈现Texture
小号Sprite
小号…
因此,大多数情况下,您将使用渲染
SpriteBatch。您在由以下内容制成的块中进行渲染:
SpriteBatch.begin()
,启动SpriteBatch。在此呼叫之前设置他的viewPort,矩阵…SpriteBatch.draw()
,将您提供给它的东西作为参数(有很多不同的draw()方法,请参阅API)绘制到缓冲区,并在缓冲区flush()
已满或被SpriteBatch.end()
调用时立即将它们绘制到GPU 。SpriteBatch.end()
,flush()
即GPU的缓冲区,因此所有内容均绘制在屏幕上。
笔记:
- 切勿一次拥有2个SpriteBatch
begin
。因此,在begin()
对end()
另一个正在运行的SpriteBatch 进行SpriteBatch调用之前 - 如果可能,请仅使用1个SpriteBatch并尝试在
end()
每个渲染循环中仅调用一次,因为这样做会降低性能。 - 不要
draw()
在begin-end块之外调用。
最后但并非最不重要的是,此“教程”:The
camera。它可以帮助您以自己的世界单位而不是像素来计算运动。您也可以通过移动它来显示游戏世界的不同部分。首先:在construcotr中设置cameraviewport:
camera = new OrthographicCamera(16, 9);
这会将视口设置为16宽度和9高度。因此,您的物理屏幕/显示器现在的宽度为16个单位,高度为9个单位。将此摄像机应用于您的SpriteBatch调用:
`SpriteBatch.setProjectionMatrix(cam.combined)`
通过这样做可以
SpriteBatch渲染您的相机正在看的东西。摄像机按默认点0,0位于其中间。所以现在在中间画些东西使用:
batch.draw(yourTexture, 0, 0);
要在右上角绘制,请使用:
batch.draw(yourTexture, 16 / 2, 9 / 2);
要移动相机,请使用:
cam.translate(16/2, 9/2);
cam.update()更改位置后,请务必致电!
现在,相机的右上角为16,9,而不是16 / 2、9 / 2。0,0点是左下角。
我希望这从一开始就不会太复杂。一些教程,帮助我学习了:
- 星球大战
- Steigert的博客



