如何FPS加快我的游戏吗?

我有我的游戏里面,每个渲染循环,通过我的地图(128×128),它为您可能会说,会导致很多滞后的所有块循环。 当我第一次做到了,我不得不做出在屏幕上只渲染块,否则会立即崩溃。 现在我只渲染通过所有块屏幕上的块,但仍然环路看他们是否在屏幕上,这让我对每秒2帧上。

for (int y = 0; y < 128; y++) { for (int x = 0; x < 128; x++) { Block b = LevelGen.getBlockAt(x, y); if (Forgotten.isInsideGameWindow(x * 30, y * 30)) { arg1.drawImage(b.getTexture(), x * 30, y * 30); } } }

有没有办法让它尽量不遍历所有的人?

--------------解决方案-------------

找出你的显示窗口的大小,只迭代是在它内部的块。

final int tile_size = 30;

final RectangleType displayWindow = Forgotten.getDisplayWindow ();

final int left = displayWindow.getLeft () / tile_size - 1;
final int right = displayWindow.getRight () / tile_size + 1;
final int top = displayWindow.getTop () / tile_size - 1;
final int bottom = displayWindow.getBottom () / tile_size + 1;

for (int y = top; y < bottom; ++y)
for (int x = left; x < right; ++x)
canvas.drawImage (LevelGen.getBlockAt (x,y).getTexture (),
x * tile_size, y * tile_size);

您可能还需要弄清楚画布竟然想得出的哪个区域(S),而是保持区域“脏矩形”名单重绘。 每当瓦的变化,或精灵/粒/不管通过空间传递,即瓷砖添加到矩形。 即使你只是使用一个肮脏的矩形放大一帧中包含所有更新,如果你的游戏实际上并没有“的事情发生”在任何时候显示器上所有的点,你的帧速率将在平均水平(但是从规模化效应苦)

扩大后认为:

public class Map {
private Rectangle dirtyRect = null;

public void dirty (Rectangle areaAffected) {
if (null == dirtyRect) {
dirtyRect = areaAffected; return;
}
dirtyRect = new Rectangle ( Math.min (dirtyRect.getLeft (),
areaAffected.getLeft () ),
Math.min (dirtyRect.getTop (),
areaAffected.getTop () ),
Math.max (dirtyRect.getRight (),
areaAffected.getRight () ),
Math.max (dirtyRect.getBottom (),
areaAffected.getBottom () ));
}

然后使用肮脏矩形代替displayWindow正常吸引,你可以测试if (null == getDirtyRectangle ()) return;如果没什么改变跳过图纸都没有。

你可以只插入你的代码块内休息..但后来我没有看到这个代码到16,32,或256倍寻找的目的...

嗯,你可以放置在一个数组中的所有块,包括在块对象的坐标然后使用这些绘制块。 那么你只能通过在屏幕上显示块必须循环。 只有有用的,如果有未在屏幕上的许多块虽然。

分类:java的 时间:2012-01-01 人气:0
本文关键词: 性能,JAVA
分享到:

相关文章

  • 反思运行时性能 - Java的VS CLR 2014-11-29

    这里的一个相关的帖子几乎确定反射Java作为一个性能猪. 这是否适用于CLR呢? (C#,VB.NET等). 编辑:如何在CLR比较Java的,当涉及到反思? 是有史以来基准? --------------解决方案------------- 使用反射本身,而是方法的实际性能和这样的,因为这些毕竟是什么,我会从类使用反正我也不会真正关心的对象的实例化的表现. 当然实例化需要大量的时间作为可以在链接后看到,但因为你是最有可能只用实例化对象的方法,而不是,你不应该太担心反射性能 - 只要你不这样做通过

  • 来自Apache下议院FileUtils.write的性能 - Java的 2013-01-30

    我已经通过了的javadoc,但我便无法找到anything.Does它在内部缓冲数据? 如果是的话,因为没有接近/冲洗操作时,它是如何确保所有数据已经​​写入. 如果没有缓冲,是否去磁盘每次调用了? http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence中,java.nio.charset

  • 针对HashMap的HashMap的性能 - Java的 2014-02-15

    所有, 我的工作,开发人员已经定义了很多现有系统上HashMaps ,定义如下: HashMap<String, Comparable> x = new HashMap<String, Comparable>(); 现在,完全没有必要进行比较的value的散列映射的一部分,因为它简单地仅表示一个单件的信息. 显影剂使用Comparable因为唯一的预期值是字符串和int类型(转换为整数对象)和显影剂假定来存储数据类型被使用可比接口的最佳方式. 于是,我继续改代码,因为这里没有比较点

  • 合并大量排序映射到一个有序映射提高性能 - Java的 2014-07-18

    我有一个得到的SortedMap作为输入,这张地图拥有许多的SortedMap对象的方法,该方法的输出应该是包含在输入地图召开的地图的所有元素之一的SortedMap. 方法如下: private SortedMap mergeSamples(SortedMap map){ SortedMap mergedMap = new TreeMap(); Iterator sampleIt = map.values().iterator(); while(sampleIt.hasNext()) { So

  • 移位操作中的Java与C ++性能 2012-03-15

    什么是移位操作中的性能Java相比C++ --------------解决方案------------- 一般来说,如果你认为你会得到不同的语言之间的基本操作显著的性能差异,那你就大错特错了,如果你认为你需要重新写在不同的语言的应用程序或应用程序的一部分获得更好的性能,最好将时间花在看你的algoritms和数据结构. 这似乎是一个简单的问题与一些你喜欢的C ++和Java IDE的使用分析工具回答.

  • Eclipse中删除上建立一个Android项目的java文件 2012-02-28

    我有一个有趣的问题. 我拉下从CVS一个Android项目,它工作正常. 当Eclipse构建项目,我的.java文件将被删除. XML文件,PNG图片,一切都很好. 我似乎只剩下了包树,但没有源文件. 有什么想法吗? --------------解决方案------------- 右键单击该项目 性能 Java构建路径 资源 检查src文件夹路径是正确的.

  • Java源代码混淆,anonomyzing代码 2013-03-20

    问题:你真的不想要你的jar文件的收件人使用工具像jad拆卸源和它的意义. 是否有你知道的,任何图书馆最起码会成功混淆你的源代码使得它很难让别人理解吗? 代码应该运行,因为它通常会当然. --------------解决方案------------- ProGuard的是你想看看使用的是什么. ProGuard的一些用途是: 创建更紧凑的代码,对于较小的代码档案,通过网络更快的传输,加载速度更快和更小的内存占用. 制作程序和库更难反向工程. 清单死代码,因此它可以从源代码被删除. 重新定位和预校

  • 编写低延迟的Java技术代码 - 到C ++有什么不同? 2013-05-31

    我今天想低延迟Java代码,除了吞吐量/分布式架构,哪些技术是有低延迟Java的? 我想问的原因是因为Java语言比C似乎简单得多++和开发者的控制较少.....所以我想知道,如果有任何语言特定的语法做/避免? 例如,在Java中你没有选择,无论是通过引用或按值传递. --------------解决方案------------- 虽然研究在这方面做的和几个选区越来越好样的在该领域用Java以及硬实时系统还比较虚幻. 软实时另一方面要简单得多. 看这里为Java规范RT - 你不能只是把你的平均

  • 什么是使用Grails取代Java中的权衡? 2014-09-12

    有使用Java的一些年来已经,我们知道我们被转移到Grails的获得. 现在的问题是,什么是我们失去了? 性能? 感谢您的输入/想法. 谢谢. --------------解决方案------------- Groovy的编译成JVM字节码和Java一样. 使用Grails你结束了一个.war文件到Java一样的容器中运行. Groovy也更慢的运行时性能Java的大部分地区,因为它是一种动态语言. 你可以有Java代码中除了常规的代码你的Grails应用程序. "我们知道我们被转移到Grail

  • 我应该使用什么来显示游戏显卡? 2012-07-04

    我有一个适当的系统,为游戏但我不知道我应该用什么来显示它. 我想提出一个垂直的射击游戏,我写的所有类控制敌人和球员的方法,但我没有想法如何有效地显示游戏. 我在想一个画布,这将重绘每帧,但真正最有效的方法? 重要的细节: 理想的帧数:25fps的 这是一个2D游戏 有在屏幕上25-100对象之间的任何地方在任何一个时间,所有这些都移动 所显示的所有对象是图像,都在PNG格式 窗口是由640像素480像素 现在所有的图像加载为BufferedImage的,虽然我可以很容易地改变这一 7.我需要一个

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.180 (s). 10 q(s)