如何创建Android 2D游戏?

sam*_*uke 5 android 2d libgdx

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

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

Epi*_*rce 13

你有多种选择,你可以选择AndEngine(这对我来说似乎非常缺乏文档和随机),从SurfaceView扩展你自己的"原生"Android游戏(这不是不可能但它肯定不会让你的生活很容易,特别是在处理图像和特别是声音时,但这里有一个设置:使用自定义SurfaceView和线程进行Android游戏编程(示例)),还有LibGDX.

我个人推荐LibGDX,我甚至做了一个相当简单的4人多人游戏,当然也不难.我建议如何获得以下教程:http://www.gamefromscratch.com/page/LibGDX-Tutorial-series.aspx

基础知识如下:

  • 创建项目时,您要做的第一件事是更改为ApplicationAdapter,Game这样您就可以访问setScreen(Screen)委派功能,这样您就可以将游戏的显示和逻辑分隔到屏幕中.

  • 您想要处理屏幕中的已用时间,其操作如下:如何在Libgdx中跟踪时间(android)

  • 您可能想要制作一个菜单,当然可以使用漂亮的图片和BitmapFonts来完成,但我会指向official wiki(https://github.com/libgdx/libgdx/wiki).你可以使用Scene2D,虽然我发现它有点困难,所以我亲自制作了一个由矩形组成的菜单,它工作得相当好:LibGDX - 自定义点击监听器?

  • 关于如何使用LibGDX处理触摸事件的更多"点击导向"指南:https://stackoverflow.com/a/24511980/2413303

  • 之后,它实际上只是实现游戏逻辑,计时器,数据模型,行为.

我解决拉伸而不是使用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) ; 
    }
}
Run Code Online (Sandbox Code Playgroud)

确保在Game的dispose()回调中处理需要处理的资源.

  • 我同意,libgdx将是最好的选择.它易于使用,多平台,可以加快开发速度. (4认同)

Spr*_*bua 7

Libgdx是不是已经过时了,恕我直言,这是为Android编程的最佳方式.原因是,您可以在桌面上开发99%(想想控制器,它不会是Android上的键盘)然后你有一个只有几行的工作Android应用程序.
如果你直接为android开发,你需要使用verry慢模拟器,或者你必须将应用程序发送到测试电话,只是为了调试你的代码.这比直接在桌面上进行调试慢得多.
Libgdx非常高效,易于使用(只要你了解它是如何工作的)并且有一个非常好的文档.

对于教程:我在这里写了一个答案,这似乎对一些人有所帮助.这是一个简短的"教程",仅显示了基础知识,并且我已经添加了一些帮助我学习它的教程的链接.所以我希望它能帮助你^^