问题
当游戏将使用大量函数调用时,将 NDK 用于游戏开发是否更好?在 1000-10000 的范围内,至少可能...
情况
我正在编写一个游戏,我打算使用基于组件的设计在具有高级结构的 android 上运行,从而摆脱上帝对象反模式,因为我一直在阅读和听说你是如何使用游戏代码的永远不应该让一个 obj 被删除,这很好,但是我听说这会产生更多的函数调用,这也会影响你的表现。请参阅:Google I/O 2009 - 为 Android 编写实时游戏
考试
protected static void voidFun(Integer i){
if(i == 4) Log.d(TAG, "This should be impossible.");
}
public static void test(){
stressTestMillis(1000);
stressTestMillis(10000);
stressTestMillis(100000);
}
protected static void stressTestMillis(int loops) {
long beforeBefore = System.currentTimeMillis();
long before = beforeBefore;
for(int i = 0; i < loops; i++){
//Just measuring raw loop time not function call time.
}
long rawLoop = System.currentTimeMillis() - before;
Integer test = 0;
before = System.currentTimeMillis();
for(int i = 0; i < loops; i++){
voidFun(test);
}
long loop = System.currentTimeMillis() - before;
long total = System.currentTimeMillis() - beforeBefore;
Log.d("Stress Test", "Loops:"+loops+" Loop:"+loop+" Loop Tare:"+rawLoop+" function Total:"+(loop-rawLoop)+" Total:"+total);
}
结果
运行Test()的结果
12-12 18:30:22.623: D/Stress Test(15863): Loops:1000 Loop:14 Loop Tare:1 function Total:13 Total:15
12-12 18:30:22.703: D/Stress Test(15863): Loops:10000 Loop:80 Loop Tare:4 function Total:76 Total:84
12-12 18:30:23.513: D/Stress Test(15863): Loops:100000 Loop:783 Loop Tare:26 function Total:757 Total:809
关注点
这让我非常担心,因为仅基于组件的设计 + AI(行为树)就是大量的函数调用,然后抛出物理,并且您查看大量方法调用并且很多时间 10000 已经超出范围......
通过我1000ms/30fps=33.333ms
每帧的计算以及10000
函数调用在76ms
那时我已经超出预算并下降到1000ms/76ms=13fps
奖励积分
对于奖励积分,我是否看过一些可以让我在仍然使用 Java 的同时继续沿着这条设计路径的东西?