2010-12-21 67 views
8

我需要您的建议,以便在简单的游戏中实现可滚动的游戏场的最佳方式。该字段由多行组成,每行有9个单元格。游戏过程中可以动态添加和删除行。每个单元格中都有一个数字,并且可以选择多个叠加图像,如选择,选择器结束,划掉等等(请参见下面的图片)。用户应该能够点击一行中的单个单元格来选择/取消选择/跨过被触摸的单元格。在游戏中的任何时候,可以有0到3000个单元格(0到大约333行)。该领域应该顺利地上下滚动。Android上的简单游戏的设计决策/建议

alt text

我在想,我与它的每一行是在球场上排一个ListView。这样我可以在游戏中动态添加/删除行。但是,我应该如何实现一行:有一个位图表示一行,然后当用户触摸它时 - 获取触摸区域的坐标,并找出受影响的单元格,然后对其执行操作。是否有可能在ListView中获取一行的触摸坐标?如果不是,我应该在每行放置9个虚拟图像占位符,然后根据用户触摸这些占位符?性能如何?

或者我应该有一个巨大的位图/帆布代表了整场,将它放在一个滚动型里面,然后计算出所有的坐标和用户与其进行交互更新呢?它会比ListView更快还是更慢?

其他解决方案?

我宁愿它是一个“普通”的应用程序类型的游戏,而不是基于循环的比赛,因为我不认为我真的需要重绘30次。

我是Android的新手。谢谢你的建议。

回答

4

您可以轻松地做出这种设置的一个“游戏圈”/SurfaceView组合快速运行。这意味着没有ListView,只有自定义绘图和事件处理。幸运的是,事件处理并不困难,而且稍后你会赢得胜利,因为与界面上大量定制的视图和布局相比,你可以更好地控制界面。

我会避免使用www.droidnova.com教程,它不必要地使用HashMaps,这只会降低性能。

这是我怎么会去一下吧:

  1. 创建一个对象来保存你的数据。对于这个例子,我会使用一个id(要打印)的对象,以及一个x和y来在屏幕上绘图。
  2. 决定在不滚动的情况下适合您的屏幕的棋盘大小,比如说10x10。稍后您将添加滚动。
  3. 创建长度为boardSize x boardSize的单元对象的二维数组。在屏幕上填充id和x和y位置的对象。
  4. 在您的自定义onDraw中,迭代单个数组的每个“行”和“列”,并在其存储的x和y值处绘制对象。

所以,现在你已经有一个对象的网格显示在你的屏幕上。现在您想要限制当前显示的行数并添加一些功能来更改哪些行可见。这是做如下:

  1. 在初始化过程中,设置一些全局整数作为mCurrentRow = 0和mNumVisibleRows = 3。这些定义你的“视图窗口”。
  2. 将您的绘图代码修改为仅绘制从mCurrentRow开始并以mCurrentRow + mNumVisibleRows结尾的行。这样做的结果应该是你只能看到mNumVisibleRows行,你看到的是哪组行取决于你设置的mCurrentRow。
  3. 在网格绘图的右侧添加一些三角形,并在这些区域中轻点触摸事件映射到mCurrentRow的增量/减量。显然,你不应该让这个值超出你的行数界限。
  4. 如果你想获得优雅,在你的三角形之间画一条滚动区域,并将触摸事件映射到newCurrentRow = (touch.y/canvas.height()) * boardSize;这需要一些调整,但你明白了。

这种方法的缺点是每次只显示一整行的行,所以滚动不平滑。但是,您可以完全控制画布和绘制的东西,所以稍微多一点数学就可以实现平滑的滚动机制,这种机制可以在y方向上将小数行高度偏移,而不是整行。

+0

谢谢乔希,你的建议非常有帮助。我已经在实施它。 – Levon 2010-12-22 05:33:31

1

我不知道你是否能像你这样出色的表现说明创建一个游戏。我会研究基本的瓦片游戏编程。

但通过避免标准视图组件是要编写所有自己需要相当长的一段工作的逻辑。诸如处理不同行上的“点击”事件之类的事情需要通过相对于游戏摄像机的瓦片位置来计算。因此,在学习开发较低级别的游戏时,很多新东西。

您还可以通过开发一个游戏循环,不断地更新和绘制的瓷砖你从后台线程,以反映你的游戏的滚动/州把你的游戏渲染成你自己的手中。 你可以得到一个游戏循环的基础知识,查看详细信息:

http://www.rbgrn.net/content/54-getting-started-android-game-development

如果您想了解更多,你应该看到的Android以下主题演讲。

http://developer.android.com/videos/index.html#v=U4Bk5rmIpic http://developer.android.com/videos/index.html#v=7-62tRHLcHk

那些让你在一个较低水平,你可以微调性能开发的Andriod游戏很好的洞察力。

+0

感谢您的建议和链接。 – Levon 2010-12-22 05:32:00