Android游戏的用户界面 - 我的选择是什么?

时间:2013-05-23 16:47:43

标签: android android-canvas android-ui

首先让我给出一些背景来使问题更加准确:

我正在开发一款Android游戏(使用SurfaceView,Canvas等),它完美适用于游戏部分。我最初尝试在它上面使用View派生元素用于菜单和其他UI元素,并通过实验快速实现并在Stackoverflow上查看一些问题,这是一个非常糟糕的主意,因为它们不能很好地混合(比如LinearLayout)在SurfaceView之上。)

我看到3条可能的路径:

A)继续在SurfaceView上使用View元素(并处理它的问题,例如可怕的滞后)

B)在SurfaceView / Canvas上手动绘制UI元素。类似的东西:canvas.drawBitmap(menuBitmap,posX,posY,...);然后手动处理触摸,并遭受屏幕碎片

C)使用专门为此设计的库/框架来处理UI的所有绘图,触摸按钮,拖动滚动等等。像View及其派生元素之类的东西,但专为使用绘制的游戏和应用程序而设计SurfaceView。

我还没有看到更多的选择吗? “C”对我来说似乎是最好的,但是有一个库吗?哪一个?

编辑:忘了问最明显的问题,还有:其他专业/商业游戏如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:2)

我真的不喜欢这些游戏引擎(AndEngine,Corona,Unity3D,cocos2d等)。我想学习Android,这对于我的职业生涯比引擎X或Y更有用。

所有游戏都是在没有游戏引擎的情况下创建的。我使用选项(A)几乎所有东西,我没有看到任何滞后或迟缓。

示例:

Minesweeper 3D的游戏画面是一组布局和视图,另外还有一个SurfaceView来保存OpenGL 3D字段。

Box Topple的游戏界面也是一组布局和视图,以及为处理和显示box2d物理引擎而创建的自定义视图。

同时查看我的other games ...

答案 1 :(得分:1)

我有同样的问题。 然后我找到了一个名为AndEngine的免费游戏引擎。 该引擎可处理您所需的一切。 例如:

  • 用于简单,高效绘图的OpenGL包装类
  • 精灵类(动画与否)
  • 粒子效果
  • 用于查看您在
  • 上绘制的场景的不同部分的相机
  • 滚动背景
  • 在线多人游戏和Box2D物理引擎扩展

对于你的情况: 它有一个连接到相机的HUD,当相机移动时它会保持静止。 然后,您可以将按钮(已内置,带有单击事件)附加到此处。 以下是一些创建按钮的示例代码:

moveRightButton = new ButtonSprite(10, 10, moveRightButtonTexture, getVertexBufferObjectManager()) {
        @Override
        public boolean onAreaTouched(TouchEvent event, float x, float y) {
            if (event.isActionDown()) {
                player.moveRight();
                // Set to 'clicked' image
                this.setCurrentTileIndex(1);
            }
            else if (event.isActionUp()) {
                // Set to 'unclicked' image
                this.setCurrentTileIndex(0);
            }

            return super.onAreaTouched(event, x, y);
        };
    };

您可以在https://github.com/nicolasgramlich?tab=repositories找到引擎及其扩展程序。

引擎的主要问题是没有文档。 但是,http://www.andengine.org/forums/有一个专门讨论引擎的论坛。 此外,您可以下载开发人员创建的AndEngine示例(通过上面提到的相同存储库),以提供引擎各个方面的用法示例。 它需要一点时间来适应,但它是非常有益的。