在Android上设计简单游戏的决策/建议

时间:2010-12-21 08:14:22

标签: android

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

alt text

我正在考虑使用ListView,其每一行都是该字段的一行。这样我就可以在游戏过程中动态添加/删除行。但是,我应该如何实现一行:有一个位图表示一行,然后当用户触摸它时 - 获取触摸区域的坐标,找出受影响的单元格,然后对此进行操作。是否可以在ListView中获取行的触摸坐标?如果没有,我应该在每一行放置9个虚拟图像占位符,然后根据用户触摸它们吗?性能怎么样?

或者我应该有一个巨大的位图/画布代表整个字段,将它放在ScrollView中然后计算所有坐标并在用户与之交互时更新它?它会比ListView更快还是更慢?

还有其他解决方案吗?

我更喜欢它是一款“常规”应用型游戏,而不是基于循环的游戏,因为我认为我不需要每秒重绘30次。

我对Android很新。谢谢你的建议。

2 个答案:

答案 0 :(得分:4)

使用“游戏循环”/ SurfaceView组合,您可以轻松快速地进行此类设置。这意味着没有ListView,只有自定义绘图和事件处理。幸运的是,事件处理并不困难,之后您将获胜,因为您可以更好地控制界面,而不是使用大量自定义视图和布局。

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

以下是我如何去做的事情:

  1. 创建一个对象来保存您的单元格数据。对于这个例子,我使用一个带有id(打印)的对象,以及一个x和y用于在屏幕上绘制的位置。
  2. 确定适合您屏幕的电路板尺寸,无需滚动,例如10x10。你稍后会添加滚动。
  3. 创建长度为boardSize x boardSize的二维单元格对象数组。在屏幕上填充id和x和y位置的对象。
  4. 在自定义onDraw中,遍历单个数组的每个“行”和“列”,并以存储的x和y值绘制对象。
  5. 所以现在你的屏幕上显示了一个对象网格。现在,您要限制当前显示的行数,并添加一些功能以更改哪些行可见。这样做如下:

    1. 在初始化期间,设置一些全局整数为mCurrentRow = 0和mNumVisibleRows = 3.这些定义了您的“视图窗口”。
    2. 修改您的绘图代码,仅绘制从mCurrentRow开始并以mCurrentRow + mNumVisibleRows结尾的行。结果应该是你只看到mNumVisibleRows行,你看到哪一行取决于你设置mCurrentRow的行。
    3. 在网格绘图的右侧添加一些三角形,并在这些区域中点击触摸事件映射到mCurrentRow的增量/减量。显然,您不应该允许该值超出行数范围。
    4. 如果你想变得优雅,可以在三角形之间画一条滚动区域,然后将触摸事件映射到类似newCurrentRow = (touch.y / canvas.height()) * boardSize;的东西,这需要一些调整,但你明白了。
    5. 这种方法的缺点是一次只显示一组完整的行,因此滚动不会很顺利。但是,您可以完全控制画布和绘制内容,因此使用更多的数学运算可以实现平滑的滚动机制,该机制将偏移y方向的小数行高而不是整行。

答案 1 :(得分: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

这些可以让您在低水平的游戏中获得非常好的洞察力,您可以对其进行微调。