2014-06-30 138 views
1

我正在制作一款游戏元素,一名男子向目标射击一枚火箭,然后目标爆炸。我用画布和线程做这个,总是重绘整个屏幕。 可以通过其他方式完成吗?因为如果会有很多动作,游戏会吃掉很多的记忆。所以我正在寻找优化以及如何在不重绘整个屏幕的情况下为对象设置动画。安卓游戏画布

回答

1

如果你使用surfaceview或纹理视图,你可以锁定屏幕的一部分,然后重画那个。 (我推荐textureview over surfaceview)。

Canvas android.view.TextureView.lockCanvas(Rect dirty)。 public Canvas lockCanvas(Rect dirty)。 在API级别14中添加。 与lockCanvas()类似,但允许指定脏的矩形。该矩形内的每个像素都必须写入;然而,在下一次调用lockCanvas()时,脏矩形外部的像素将被保留。如果底层表面纹理不可用(参见isAvailable())或者表面纹理已经连接到图像生成器(例如:相机,OpenGL,媒体播放器等),则此方法可返回null

+0

如果我需要animati上?当物体移动时,我是否必须重绘背景?那里的表演呢? – Droid

+0

Textureview允许动画,设置线程来锁定画布,执行编辑画布的'draw'方法,然后解锁;必要时重复(代码与SurfaceView类似,其中有很多教程)。您将不得不重新绘制要绘制到的矩形中的所有内容。我不确定确切的表现,但我会认为它是做动画的最好的非opengl方法。我有一个较小的动画,但我不得不拖延,因为它太快了。 – Whitney

1

只是一个建议。

为什么你不使用游戏框架,如libgdx? 它会带你从纯粹的android代码,但它会让你专注于你的游戏,而不是内存管理。(你的游戏也可以在其他平台上播放)

如果你喜欢这个想法,还有其他的工具(unity,gamesalad等)

+0

libgdx我只知道java。 – Droid

+0

相当迟的回复,但我认为你错了,我没有尝试过,但libgdx使用gradle,并且android studio默认使用gradle,基本上是intelliJ Idea重构了我在libgdx文件里看到的一些智能设置指令,当然libgdx使用java语言,所以你不必学习另一种语言 –

+0

是的,现在它与android-studio一起工作了。任务在libgdx。谢谢) – Droid