3

首先,让我提供一些上下文以使问题更准确:

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

我看到了 3 条可能的路径:

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

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

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

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

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

谢谢

4

2 回答 2

2

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

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

例子:

Minesweeper 3D的游戏屏幕是一组布局和视图以及一个用于保存 OpenGL 3D 字段的 SurfaceView。

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

也可以看看我的其他游戏...

于 2013-05-24T11:22:58.880 回答
1

我有这些完全相同的问题。然后我找到了一个名为 AndEngine 的免费游戏引擎。该引擎几乎可以处理您需要的一切。例如:

  • 用于简单、高效绘图的 OpenGL 包装类
  • Sprite 类(动画或非动画)
  • 粒子效果
  • 用于查看您绘制的场景的不同部分的相机
  • 滚动背景
  • 在线多人游戏和 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 示例(通过我上面提到的同一存储库),以提供引擎各个方面的用法示例。这需要一点时间来适应,但它非常有益。

于 2013-05-23T18:31:12.683 回答