当游戏使用大量函数调用时,将NDK用于游戏开发是否更好?至少可能在1000-10000的范围内......
我正在编写一个游戏,我打算在Android上使用基于组件的设计的高级结构运行远离God Object anti-patern我怎么可能用游戏代码撞墙,因为我一直在阅读和听到关于你怎么永远不要让一个obj被删除哪个很好,但这使得我听到的更多功能调用也会占用你的表现。请参阅:Google I/O 2009 - Writing Real-Time Games for 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的东西吗?
答案 0 :(得分:1)
JVM
和main()
函数,每个函数都有1个线程默认情况下分配,两者都是“沙盒”,无法直接访问资源;因此,如果您打算使用NDK并且您认为使用C / C ++,您将获得对硬件的低访问权限,就像在其他硬件/机器人解决方案上发生的那样,您错了。您甚至可以为您的应用程序获得基本相同的生命周期,使用C / C ++,您可以使用更少的API。