10大优享服务
62项会员特权

在Jave游戏开发时怎么最快获得FPS

发布时间:2021-12-01 08:10:18     阅读次数:10524次     评论数:0次

    也许我们正常的消费者只知道游戏的玩,如何去选择游戏的角色,可是一说到Jave游戏开发,我们应该会认为这是一个比较复杂的工作,而且我们也不懂得这一工作的设计流程,而相对于Jave游戏开发的工作人员来说,游戏开发是需要我们有一定的设计基础的,而且游戏开发的成功将直接反映在FPS中。

在Jave游戏开发时怎么最快获得FPS

    什么是FPS?

    这里所说的FPS,并非指射击游戏,而是指俗称的“帧率”(Frames per Second,缩写:FPS)或“赫兹”(Hz)。笔者在以前的博文中曾给出过专门的解释及Java实现示例,此处不再赘述。

    受到人类眼球的生理结构制约,通常情况下只要我们所见画面高于每秒16帧,就会认为画面是连贯的,生物学上称此现象为视觉暂留,这也就是为什么电影胶片是一格一格拍摄出来,然而我们却认为它是连续的一段。当然,所谓的16帧也只是一个中值,并非放之四海而皆准,根据具体视觉对象不同,帧率的具体标准会有所变化。在最坏情况下,动画不低于每秒12帧,现代电影不低于24帧,动作游戏不低于30帧,在人眼中的画面才是连续不间断的。

    总之,FPS数值越高则画面流畅度便越高,越低则越显停滞,要提高Java游戏运行效率,那么焦点就必然要集中在如何提高程序的FPS之上。

    我们该从什么地方入手,才能提高FPS?

    Java绘图最终要通过native,这是地球人都知道的事情。这意味着除非我们学习SWT重写本地图形接口,否则显示部分我们无法干涉;这样便决定了我们对FPS的优化必然要集中在本地图形系统调用之前,而非之后。也就是说,提高Java游戏开发应用的FPS,还要老生常谈的从Image与Graphics及其相关子类入手。

    下面,我将展示三种不同的Java缓冲绘图方式。

    1、采用BufferedImage对象进行缓冲

    这种方法是最简单,同时也是最常用的双缓冲构建方式,也就是构建一个BufferedImage缓冲当前绘图,所有Graphics操作在其上进行,仅在需要时才将贴图paint于窗体之上,使用上再简单不过,但效率如何呢?文章进行到此处时尚不得而知。

    2、采用BufferStrategy构建缓冲区

    使用BufferStrategy构建缓冲能够获得系统所提供的硬件加速,Java系统会根据本地环境选择最适合的BufferStrategy。要创建 BufferStrategy ,需要使用 createBufferStrategy() 方法告诉系统你所期望的缓冲区数目(通常使用双缓冲,也就是填入“2”),并使用 getDrawGraphics() 方法在缓冲区之间进行交换,该方法返回下一个要使用的缓冲区。BufferStrategy最大的缺点与优点都在于其受本地图形环境影响,既不会出现很快的图形环境跑出很慢的FPS,也别指望很慢的图形环境跑出很快的FPS。

    3、完全在BufferedImage的DataBuffer中进行图像处理

    每个BufferedImage都有一个与之对应得WritableRaster对象(getRaster方法获得),通过它我们获得指定BufferedImage的DataBuffer(getDataBuffer方法获得),与方法1类似,我们同样构建一个BufferedImage缓冲当前所有绘图,所有操作都在其上进行,仅在需要时才将贴图paint于窗体之上。但区别在于,由于DataBuffer可以转化为描述BufferedImage象素点的int[],byte[]或short[]等数组集合,因此我们不再使用Java提供的Graphics对象,而是直接操作像素点进行所有绘图的实现。

    21世纪是一个全民游戏的时代,现如今手机游戏也成为了很多消费者在业余生活中,必不可少的一种释放生活压力的方式,因此,不论是我们从哪一个方面或者平台获得的游戏,我们都可以在玩游戏的过程中,体会到放松心情的舒畅感,不过,作为一个游戏的忠实玩家,我们也应该要在玩游戏之余,通过一些平台获取到Jave游戏开发的相关知识。

本文地址:
来源:一品威客,转载须经版权人书面授权并注明来源

留言(0

↓展开留言

该攻略尚无留言记录