如何创建Android 2D游戏?

时间:2014-07-14 15:00:27

标签: android libgdx 2d

我还是一个仍然在Android学习的开发者,到目前为止我创建了两个应用程序,一个闹钟,一个小部件和一个使用数据库的通过管理器,我有一些经验,但是我&# 39;我想创建一个2D侧卷轴游戏,我在网上查看并有不同的教程,但是,什么是开始工作的最佳方式?我读过关于libgdx的内容,但我不确定它是否已经过时了。

我已经看到所有的游戏都是用Java制作的,然后移植到Android上,这是正确的吗?我很感激一些指导,谢谢!

2 个答案:

答案 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 wikiHow 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,这似乎对一些人有帮助。这是一个简短的“教程”,只显示了基本的基础知识,我已经添加了一些教程的链接,这些教程帮助我学习它。所以我希望它可以帮助你^^