我将为Android创建一个简单的回合制2D游戏,据我所知,基本上有三种绘制方法。
当我制作一个小型模拟游戏(la Farmville)时,我使用了SurfaceView,因为它使用了一些简单的动画,如果我使用了“普通”视图,我必须使用Timer以一定间隔更新图形。我不知道这两种方法中的哪一种更好,但SurfaceView方法似乎更容易。另一方面,我认为使用无限的“游戏循环”可以非常快速地耗尽电池。至于OpenGL,我不知道它是如何工作的,或者对于简单的游戏来说太复杂了。
所以,如果我有一个简单的回合制游戏(想想有点像神奇宝贝的战斗部分),上述哪种方法最好?其他游戏使用的是什么(如愤怒的小鸟,DanteInferno,Inotia,Jewels,Robo Defense,Wisp,Zonina等)?
我发现网上的信息非常不清楚何时使用。
答案 0 :(得分:3)
我有一个简单的棋盘游戏,这是一种基于回合制的游戏,我使用SurfaceView,它出来相当不错。您可以优化SurfaceView,但如果您使用标准视图,最终会遇到问题,特别是如果您有滚动游戏。
我使用这篇文章非常有帮助,它有许多不同的方法来实现游戏循环的优点和缺点:http://www.koonsolo.com/news/dewitters-gameloop/ 这是一个很好的起点。
关于电池的耗尽 - 您可以使用Thread.sleep(),因此它会持续更长时间。还没有对电池进行任何测试,但是你必须面对游戏耗尽电池的事实,特别是如果你玩了几个小时:)
答案 1 :(得分:1)
OpenGL还使用了一个重复调用的绘图循环,因此它将以与SurfaceView方法类似的方式运行。 OpenGL因其性能能力而受到称赞,但确实带来了相当大的复杂性 - 对于一个小项目来说,它可能不值得投资,除非你想要了解它是如何工作的!
至于电池寿命,最耗费CPU的任务将是最耗尽的任务,这意味着最有效的重绘策略(基于时间或事件驱动)将是最佳选择。对简单原型进行基准测试可以让您了解哪种方法最适合您的游戏代码。
答案 2 :(得分:1)
我还没有在Android上进行游戏开发,但我一直在创建一个涉及大量动画和滚动UI元素的应用程序。对于这个项目,我使用了普通扩展视图和SurfaceViews的混合,我不得不借用传统上用于游戏编程的许多技术。在此过程中,我已经了解了普通视图和SurfaceViews的不同之处,以及使用它们的优缺点。
我认为两者之间的巨大差异,我认为很重要的是,使用SurfaceView几乎可以直接写入屏幕缓冲区(技术上不正确 - 但最简单的思考方式)是你想要的,并且经常如你所愿(在极限范围内)。它不会“坐”在普通的View层次结构中。能够以这种方式绘制允许快速动画图形(特别是通过偏移位图来创建滚动背景并在顶部覆盖动画位图精灵)。您的代码在需要时直接执行绘图。就我自己的经验而言,SurfaceView的主要缺点是你不能在其后面出现任何其他视图(即没有透明效果)。
另一方面,普通视图位于普通的视图层次结构中。与SurfaceView不同,只要您的代码想要,就无法执行正常View的重绘。您必须在该视图上调用invalidate()
(或来自非UI线程的postInvalidate()
来告诉系统您要重绘它,然后系统最终将调用该视图的{{1}一段时间后做绘图。无法保证调用的速度有多快,这可能会限制您更新图形的速度。然而,普通View的优势在于它位于普通View Heirarchy中,您可以将视图放在彼此的顶部并具有透明度等等。