摘要:
4.音频模块(Audio) 音频模块编程从来都是一个复杂的话题。这里不打算用到一些高级复杂的音频处理手段,主要是播放一些背景音乐。在书写代码前,让我们了解一下音频的基础知识。 采样率:定义了每秒从连续信号中提取并组成离散信号的采样个数,采样率越高音质越好,单位用赫兹(Hz)来表示,CD一般是44.1KHz。对于每个采样系统会分配一定存储位(bit数)来表达声波的声波振幅状态,称之为采样分辨率或采样精度,每增加1个bit,表达声波振幅的状态数就翻一翻,并且增加6db的动态范围态,1个2bit的数码音频系统表达千种状态,即12db的动态范围,以此类推。如16bit能够表达65536种状态,24.. 阅读全文
摘要:
5. 图像模块(Graphics) 最后一个模块是图像操作模块,用来绘制图像到屏幕上。不过要想高性能的绘制图像,就不得不了解一些基本的图像编程知识。让我们从绘制2D图像开始,首先要了解的一个问题是:图像究竟是如何绘制到屏幕的?答案相当复杂,我们不需要知道所有的细节。光栅、像素和帧缓冲(Framebuffers) 现在的显示器都是基于光栅的,光栅是一个两维度的格子组成,也就是像素格。光栅格子的长宽,我们一般用像素来表示。如果仔细观察显示器(或者用放大镜),我们就可以发现显示器上面有一个一个的格子,这就是像素格或者光栅格。每个像素的位置可以用坐标表示,于是引入了二维坐标系统,这也意味着坐标值是.. 阅读全文
摘要:
6.游戏框架 所有的基础工作做完后,我们最后来探讨一下游戏框架本身。我们看下为了运行我们的游戏,还需要什么样的工作要做:游戏被分为不同的屏幕(screen),每个屏幕执行着相同的任务:判断用户输入,根据输入渲染屏幕。一些节目或许不需要任何用户输入,但会过段时间后切换到下一屏幕.(如Splash界面)屏幕需要以某种方法被管理(如我们需要跟踪当前的屏幕并且能随时切换的下一屏幕)游戏需要允许屏幕访问不同的模块(比如图像模块、音频模块、输入模块等),这样屏幕才能加载资源,获取用户输入,播放声音,渲染缓冲区等。因为我们的游戏是实时游戏,我们需要当前的屏幕快速的更新。我们因此需要一个主循环来实现。主循环. 阅读全文
摘要:
1. 对于明确不需要派生的类,添加final修饰符,此时该类的所有方法都是final的。Java编译器会寻找机会内联(inline)所有的final方法。(能使性能提升50%)2. 尽量重用对象,避免生成过多的对象。对于String的连接,用StringBuffer代替。3. 尽量少用全局变量如static等(heap中创建,慢),多用局部变量(Stack中创建,快)。4. 不要重复初始化变量。默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变量设置成0.0,逻 阅读全文
摘要:
常用的:1.优化循环。通过重新组织重复的子表达式来提高循环体的运行性能。2减少使用对象的数量来提高运行性能。3.缩减网络传输数据来缩短等待时间。其他:1.采用对象池技术,提高对象的利用效率。性能的损耗主要源于创建和释放对象,因此要避免对象的创建和释放。采用对象池技术,预先定义一个对象池,预先创建一组待使用的对象:Enemy[5] enemy=new Enemy[5];for(int i=0;i<5;i++){ enemy[i]=new Enemy();}增加标志如used和reset标识Enemy的状态。需要创建对象时从对象池中获取 一个未被使用的对象并用reset方法初始化;需要释放时 阅读全文
摘要:
1. android内存泄露概念 不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露。其实如果我们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造成了内存泄露。如果我们的java运行很久,而这种内存泄露不断的发生,最后就没内存可用了。当然java的,内存泄漏和C/C++是不一样的。如果java程序完全结束后,它所有的对象就都不可达了,系统就可以对他们进行垃圾回收,它的内存泄露仅仅限于它本身,而不会影响整个系统的。C/C++的内存泄露就比较糟糕了,它的内存泄露是系统级,即使该C/C++程序退出,它的泄露的内存也 阅读全文
摘要:
Android中读取/写入文件的方法,与Java中的I/O是一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。但是在默认状态下,文件是不能在不同的程序之间共享的,以上两个方法只支持读取该应用目录下的文件,读取非其自身目录下的文件将会抛出FileNotFoundException异常。创建的文件存放在/data/data/<package name>/files目录下。返回值函数备注FileInputStreamopenFileInput(String name)打开指定的私有文件输出流。name:要打开的文件名,不能包含路径分隔符 阅读全文
摘要:
Java的网络类可以让你通过网络或者远程连接来实现应用。而且,这个平台现在已经可以对国际互联网以及URL资源进行访问了。Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷。我们通过使用Java的URL类就可以经由URL完成读取和修改数据的操作。 通过一个URL连接,我们就可以确定资源的位置,比如网络文件、网络页面以及网络应用程序等。其中包含了许多的语法元素。 从URL得到的数据可以是多种多样的,这些都需要一种统一的机制来完成对URL的读取与修改操作。Java语言在它的java.net软件包里就提供了这么一种机制。 URL class是从URL标示符中提取出来的。... 阅读全文
摘要:
1.HttpURLConnection连接URL1)创建一个URL对象URL url = new URL(http://www.baidu.com);2)利用HttpURLConnection对象从网络中获取网页数据HttpURLConnection conn = (HttpURLConnection) url.openConnection();3)设置连接超时conn.setConnectTimeout(6*1000);4)对响应码进行判断if (conn.getResponseCode() != 200) //从Internet获取网页,发送请求,将网页以流的形式读回来throw new 阅读全文