我还是一个仍然在Android学习的开发者,到目前为止我创建了两个应用程序,一个闹钟,一个小部件和一个使用数据库的通过管理器,我有一些经验,但是我&# 39;我想创建一个2D侧卷轴游戏,我在网上查看并有不同的教程,但是,什么是开始工作的最佳方式?我读过关于libgdx的内容,但我不确定它是否已经过时了。
我已经看到所有的游戏都是用Java制作的,然后移植到Android上,这是正确的吗?我很感激一些指导,谢谢!
答案 0 :(得分:13)
你有多种选择,你可以选择AndEngine(对我来说似乎非常缺乏文档和随机),制作你自己的" native"从SurfaceView扩展的Android游戏(这不是不可能的,但它肯定不会让你的生活变得轻松,特别是在处理图像和特别是声音时,但这里有一个设置:{{3} }),以及那里的LibGDX。
我个人推荐LibGDX,我甚至做了一个相当简单的4人多人游戏,当然并不难。我推荐以下有关如何访问它的教程:Using a custom SurfaceView and thread for Android game programming (example)
基础知识如下:
创建项目时,首先要做的是将ApplicationAdapter
更改为Game
,以便您可以访问setScreen(Screen)
委派功能,这样你就可以将游戏的显示和逻辑分成屏幕。
您希望在屏幕中处理已用时间,其操作如下:http://www.gamefromscratch.com/page/LibGDX-Tutorial-series.aspx
您可能想制作一个菜单,当然可以使用漂亮的图片和BitmapFonts来完成,但是我会指向official wiki
(How to track time in Libgdx(android)) 。你可以使用Scene2D,虽然我发现它有点困难,所以我亲自制作了一个由矩形组成的菜单,效果相当不错:https://github.com/libgdx/libgdx/wiki
多一点"点击导向"指导我如何使用LibGDX处理触摸事件:LibGDX - Custom Click Listener?
我解决拉伸而不是使用StretchingViewport或内置相机的方法如下:
public class Resources
{
public static Texture texture;
public static SpriteBatch batch;
public static Matrix4 normalProjection;
public static BitmapFont bitmapFont;
public static ShapeRenderer shapeRenderer;
....
}
public static void initialize()
{
int width = Gdx.graphics.getWidth();
int height = Gdx.graphics.getHeight();
Resources.bitmapFont = new BitmapFont();
Resources.shapeRenderer = new ShapeRenderer();
Gdx.gl.glLineWidth((width < 640 && height < 480) ? 2.5f : 6f);
//camera = new OrthographicCamera(1, h / w); //I didn't use this at all
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
loadTextures();
Resources.batch = new SpriteBatch();
Resources.normalProjection = new Matrix4().setToOrtho2D(0, 0, 480, 320); //model is 480x320
Resources.batch.setProjectionMatrix(Resources.normalProjection);
Resources.shapeRenderer.setProjectionMatrix(Resources.normalProjection);
}
public class InputTransform
{
private static int appWidth = 480;
private static int appHeight = 320;
public static float getCursorToModelX(int screenX, int cursorX)
{
return (((float)cursorX) * appWidth) / ((float)screenX);
}
public static float getCursorToModelY(int screenY, int cursorY)
{
return ((float)(screenY - cursorY)) * appHeight / ((float)screenY) ;
}
}
确保在Game的dispose()回调中处理需要处理的资源。
答案 1 :(得分:7)
Libgdx
不是过时的,恕我直言,是为Android编程的最佳方式。原因是,你可以在桌面上开发99%(想想控制器,它不会是Android上的键盘)然后你有一个只有几行的工作Android应用程序。
如果你直接为android开发,你需要使用verry慢模拟器,或者你必须将应用程序发送到测试电话,只是为了调试你的代码。这比直接在台式机上调试慢得多。
Libgdx非常高效,易于使用(只要你了解它是如何工作的)并且有一个非常好的文档。
对于教程:我写了answer here on SO,这似乎对一些人有帮助。这是一个简短的“教程”,只显示了基本的基础知识,我已经添加了一些教程的链接,这些教程帮助我学习它。所以我希望它可以帮助你^^