Archive for Android Code

啊啊啪–v1.1 声音处理开源

啊啊啪”已经发布6天了,到目前4月21日 ScoreLoop统计的最高分一共有: 12539个,估计有很多Android初学者对声音处理都比较感兴趣,所以我现在把声音处理部分的代码放上来。

Q:为什么要发布这段代码?

A:因为我的啊啊啪尝试用了proguard保护和优化代码,所以大部分代码都被混淆过,那些以学习为目的反编译apk的同学看起来就有点困难。所以放上下面这段声音处理的全部代码。

Q:为什么不全部放上来?

A:因为游戏其他部分都甚为简单不值一提,所以暂时就不放上来了。

Q:你放上来有什么不可告人的目的吗?

A:有的,根据我从论坛用户收到的反馈来看,下面这些机型在运行啊啊啪的时候有很多问题。 MEIZU M9(部分M9可以正常运行),索尼爱立信 x10(x10 mini pro可以运行),Acer a1,三星i9000(2.2),Atrix 4g,LG GT540,三星 I858…… 这可以看出来Android手机的不同机型差异实在有点大。这直接导致了我在谷歌market 里面发布后,总评不到3星的悲惨情况。放上这段代码喜欢能看到代码的同学引以为戒,并且能够找到好的方法来解决各个机型上面的差异。不然在android上面开发声控游戏是完全没有前途的。如果你有好的解决方案你可以留言或通过邮件告诉我,或者发布后通知我一下,开源是一种程序员很牛X的态度:)
目前我自己尝试过的解决方案是加入敏感度调节,但是收效甚微。我想到的另一种方案是:在游戏第一次开始的时候叫用户发出“啊” 和 “啪”的声音,记录下来,平均处理一下,游戏中就使用处理后的值,这种方法应该很不错,我可能会在之后尝试一下这个方法。

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" />

Writing Real-Time Games for Android

为Android编写实时游戏

—-学习笔记

这篇文章是Chris Pruett 在Google I/O 2009的一个演讲视频的笔记。我翻译了大部分的演讲的演示稿,里面有不少疏漏,臆断和错误都是我记录的时候造成的,与演讲作者无关。本文的版权归演讲作者所有。转载请保留演讲作者的信息和本文链接。
你可以从下面的链接进入该主题在Google I/O 2009 的原文里面含视频和演示稿。http://www.google.com/events/io/2009/sessions/WritingRealTimeGamesAndroid.html
演示稿的直接连接:http://dl.google.com/io/2009/pres/WritingRealTimeGamesforAndroid.pdf
演讲作者所制作的Android开源(apcha 2.0)游戏 Replica Island : http://replicaisland.net/
http://replicaisland.blogspot.com/ 该游戏的开发笔记!

为什么要在Android平台上面开发游戏?
*传统PC和控制台游戏市场都变得高风险,只有很少的公司能够承担。
*在非传统游戏平台上面的小游戏持续赢得了那些原来在传统游戏平台上面的玩家和新玩家的亲睐。
-新平台参照:Nintendo Wii, iPhone, Flash, XBLA,等。
-低风险=更有趣+更多样的内容。
*Android给开发游戏提供了一个面向广泛的,熟悉互联网受众的渠道。(指的是那些需要打电话也需要在手机里面玩游戏的人)

为什么这个游戏是在Android平台上?
*我做这个游戏的三个目标:
-给Android制作一个有趣的游戏。
-制作一个可复用,开源的游戏引擎让大家为Android开发游戏。
-对Android平台进行压力测试:只使用已经公开的代码和工具来制作游戏。
*我计划做一个传统的2D卷轴类游戏。
-视差层(近景远景不同的移动速度),基于图块(tile-based),精灵动画(animated sprites),等。
-引入所有的硬件按钮:输入系统,OpenGL ES, 声音,等。
-这个游戏可能需要一个20%的工程师(即作者,20%是说作者每个星期用一天时间来开发这个游戏)开发6个月的时间和一个全职美工开发4个月的时间。
-游戏的工具写起来非常的简单。

作者用G1演示了Replica island的demo。

游戏引擎的架构
*有许多的实现方法,但是基础的问题都差不多。
*我的实现方法是一个可以在每一帧都被遍历的“游戏图”(Game Graph),可以获取时间和移动事件作为输入,结果记录在一个清单里面来画出画面。(这里的Grahp在大多数情况下你也可以理解成树结构)
-所有图形的“根”(root)都是“main loop”。
-main loop 的所有子节点每帧都被调用一次。(所有的子节点都可以拥有他自己的子节点)
-在树中更底层的节点有可能同样被每帧调用一次,这取决于他的父节点。
-“game objects”是“game manager”的一个节点,”game manager”保证只访问那些在以摄像机为中心的一个圆形心区域内的节点。(译者:其实做了类似于场景管理的工作)
-”game objects”他们本身就是“game components”的子图,每个component 都可以实现自己特定的功能,比如自己特有的更新循环(update loop)。

Read more

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开发资料记录(二)

敬告各位Android手机用户

因为各种原因,谷歌官方的电子市场(Market)在中国的Android手机里面非常不普及,有很大一部分Android手机里面甚至没有电子市场。从任何第三方应用商店上面下载Android应用或游戏会给你带来非常大的风险,轻则被莫名扣费,重则陈老师的悲剧重演。请各位用户尽量从谷歌官方的电子市场上面下载游戏,或者游戏的官方网站上面下载,尽量不要使用第三方软件市场。(PS.用所谓的某些手机安全软件完全无益于保护你的手机安全)

尽量使用官方的ROM,或者国外原版的ROM,国内的很多ROM会集成不少流氓软件(并且很难删除),并且很可能同样隐藏恶意代码进行扣费,安全性完全不能保证。

请使用谷歌官方电子市场(Market)使用原版ROM,这样可以保证你Android手机的安全。

网易新闻:

SP吸费瞄上Android平台 40%应用被植入扣费代码

http://tech.163.com/11/0104/00/6PGV62FD000915BE.html

Android将成手机病毒重灾区

http://tech.163.com/10/1230/04/6P4HO7IE000915BE.html

SP利用Android应用吸费四部曲 揭秘背后利益链

http://tech.163.com/11/0105/01/6PJN95I4000915BE.html

SP利用Android应用吸费后续:如何保卫你的话费

http://tech.163.com/11/0106/03/6PME0HEM000915BE.html