Tag Archive for 开发

Android开发体会

从我开始学习JAVA和Android编程到现在已经快5个月了,目前有3个免费游戏发布(http://codeand.me)。去年12月份你我买了一个二手(14天机) HTC G1 ¥1200 然后开始了我的Android游戏编程。

我现在的体会是:Android开发在某国确实很难赚钱! 下面我描述一下我的感受,里面的内容都是感受,只不过是我这段时间以来对这个行业的了解和体会,我并没有做过任何详细的统计和调查,请选择性阅读:)

 

1.Android手机的混乱

这是搞技术的人一个很头疼的问题,非常多的屏幕分辨率。用Android Canvas制作的游戏还很难全屏,因为不能直接拉伸,只能自己设定各个图片的相对位置。我在制作“蛋人跳吧”的时候,开始自己用Canvas吧整个游戏都写完了,已经准备发布,在发布前用模拟器做了一下各种分辨率的测试,然后就悲剧了,无法修正的悲剧,后来只能改用AndEngine重写一遍。还有就是在制作“蛋人跳吧”的时候,我的游戏做了一半,我发现了个程序框架上的Bug,无法修复我用的是Lunar lander 那个著名的Android 开发文档里面的例子! 这个有bug的例子尽然坚挺了多年而没有被修复过!这也浪费了我不少时间。

手机硬件的差异还体现在我的新游戏“啊啊啪”上面,一个iPhone声控飞机的克隆游戏。里面用到了AudioRecord来获取麦克风的输入信息,这个游戏果断的在不少手机上面无法运行,在各种手机上面有不同的表现(虽然我后面增加了声音敏感度调节功能)。独立开发者不可能有那么多手机来测试的,最好情况也就3-4个,而Android系统的热卖机型那就数不清了。就算我有那么多的机型可以测试,以一个人的力量或者少数几个人的力量也需要花费非常多的精力来一个个解决这些问题。还有不少问题可能是无法解决的,跟手机硬件相关的。这点确实令人沮丧。

Read more

Android开发资料记录(二)

如果感兴趣你可以阅读:Android开发资料记录(一)


Android Canvas 的抗锯齿(Anti-Alias)设置
http://www.javaeye.com/topic/794505
法一:直接设置Paint   paint.setAntiAlias(true);
法二:不能设置Paint的函数可以用:
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));

原文中给出了两种方法的对比,方法二的效果是最好的。
这两种方法都可以用在文字的渲染上。
我在我自己的程序里面实验了下第一种方法。我的图片是一个64×64的小方块,方块一直在移动,并且有一定的旋转,用了第一种方法后锯齿效果更明显。可能是图片的原因。

Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
这个方法也是可以开启 Paint的抗锯齿调用起来比较方便。



一个Android的详尽教程网站
http://www.helloandroid.com/
Android的教程网站,里面有很多有用的教学文章,涵盖Android编程几乎所有方面。



学习Android Canvas编程的非常好的学习示例
Lunar lander 的代码,学习Android Canvas 游戏编程的一个很好的示例。(需番羽墙)
http://developer.android.com/resources/samples/LunarLander/index.html
http://www.anddev.org/2d_tutorial-t3120.html  有人把这个游戏代码简化了,做了一个非常简单的游戏框架。非常不错。

注意:这两个框架有个严重的BUG,就是在运行这个框架做的游戏的时候,如果有电话打进来或者你点击率home键,在从新恢复游戏的时候,游戏会崩溃,网上的解决办法都不能够完美解决。

还有个更好的框架:看Chris pruett 的简易框架,这个项目里面包括了 简单的opengl es  和 Canvas的框架

http://code.google.com/p/apps-for-android/source/browse/#svn%2Ftrunk%2FSpriteMethodTest


Google I/O 2010 – All Android Talk Videos

Google I/O 2010 的全部演讲视频,有简要介绍。(youtube视频)
http://www.anddev.org/announces/google-i-o-2010-all-android-talk-videos-t14798.html


让你的Android应用在运行的时候屏幕不变暗。
默认情况下,Android应用会在系统设定的指定时间内没有点击事件后就会把屏幕变暗,然后到一定时间就关闭屏幕。下面的代码可以让你的应用开启的时候屏幕永远处于激活状态。对于好多应用和游戏都非常有用。
代码在:http://www.androidsnippets.org/snippets/53/
不要忘记在AndroidMainfest.xml 里面获取授权:
<uses-permission android:name="android.permission.WAKE_LOCK" />

Android开发资料记录(一)

 

以下资料如果没有注明均为英文资料

Android XML Parser Performance

http://www.developer.com/ws/article.php/10927_3824221_2/Android-XML-Parser-Performance.htm
DOM Pull SAX 方法在Android下的对比。(文中结论:SAX在Android下优于其余两种方法)
下面是一篇关于如何使用sax 从xml文件中载入游戏关卡文件的教程。这个AndEngine论坛里面的文章,但是跟AndEngine关系不大,它适用于所有用sax从xml文件中载入数据。
http://www.andengine.org/forums/tutorials/xml-parsing-within-andengine-t372.html

OpenGL ES Tutorial for Android – Part I – Setting up the view

Per-Erik Bergman 关于Android下OpenGL ES 的系列教程,图文并茂。
http://blog.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/

Why a lot of android game  has own GLSurfaceView.
在很多开源的Android游戏里面你都能找到游戏自己的GLSurfaceView.java,而且跟原生的那个差不多,这个问题困扰了我很久,直到在AndEngine自己的GLSurfaceView.java里面我发现了如下的注释才稍微明白了一点:
// This class is a replacement for the original GLSurfaceView, due to issue:
// http://code.google.com/p/android/issues/detail?id=2828
// Reason: Two sequential Activities using a GLSurfaceView leads to a deadlock in the GLThread!
详细的原因我不太清楚,毕竟没有实践过,但是大概是因为某种原因原生的GLSurfaceView在同一时间只能有一个实例存在,多线程的情况下使用原生的GLSurfaceView可能会出现死锁。这个问题很致命,很多Android游戏运行的时候都会把主逻辑和渲染分开,这样可以提高渲染速度。Replica Island的作者在下面这文章中有详细描述。

Rendering With Two Threads

http://replicaisland.blogspot.com/2009/10/rendering-with-two-threads.html  (需番羽墙)
作者将他游戏的渲染过程独立在一个单独的线程中执行以后,游戏的fps提高了30-40%,这样做的主要原因作者在文章描述如下:
for Replica Island I took a different approach. The problem with the single GLSurfaceView thread is that eglSwapBuffers() must block on the hardware until the previous frame finishes drawing. That means that even if you have nothing to draw, a call to eglSwapBuffers() takes 16.67ms to complete. (And of course, if you have a lot to draw, it could take a lot longer).
并且作者还在文中描述了一种使用双缓冲(double buffer )的方法来解决线程间同步的问题。
这篇文章可以作为 优化 Android 游戏的一个参考。
Replica Island
http://replicaisland.blogspot.com
这个博客是Replica Island这个开源游戏的开发日志,其中包括了很多非常好的Android游戏开发的技术文章和游戏设计文章,作者是Chris Pruett,他在09 10界的Google I/O 会议上面都做了关于Android游戏开发的讲座:2009 http://www.youtube.com/watch?v=U4Bk5rmIpic  2010 http://www.youtube.com/watch?v=7-62tRHLcHk&feature=channel  (两个都需番羽墙

如果有兴趣请阅读:Android开发资料记录(二)