首先让我给出一些背景来使问题更加准确:
我正在开发一款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”对我来说似乎是最好的,但是有一个库吗?哪一个?
编辑:忘了问最明显的问题,还有:其他专业/商业游戏如何解决这个问题?
由于
答案 0 :(得分:2)
我真的不喜欢这些游戏引擎(AndEngine,Corona,Unity3D,cocos2d等)。我想学习Android,这对于我的职业生涯比引擎X或Y更有用。
所有游戏都是在没有游戏引擎的情况下创建的。我使用选项(A)几乎所有东西,我没有看到任何滞后或迟缓。
示例:
Minesweeper 3D的游戏画面是一组布局和视图,另外还有一个SurfaceView来保存OpenGL 3D字段。
Box Topple的游戏界面也是一组布局和视图,以及为处理和显示box2d物理引擎而创建的自定义视图。
同时查看我的other games ...
答案 1 :(得分:1)
我有同样的问题。 然后我找到了一个名为AndEngine的免费游戏引擎。 该引擎可处理您所需的一切。 例如:
对于你的情况: 它有一个连接到相机的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示例(通过上面提到的相同存储库),以提供引擎各个方面的用法示例。 它需要一点时间来适应,但它是非常有益的。