有人告诉我,我应该尽可能避免从其他课程中引用我的主要游戏类的属性,因为这是一个低效的事情。这是真的吗?对于一个简单的例子,在我的Character类中
MainGame.property = something;
MainGame.property2 = something2;
MainGame.property3 = something3;
//etc.
执行时间比将其放在函数
中需要更多时间 MainGame.function1();
并调用它(因此需要“打开”该类只一次而不是多次)?按照同样的逻辑,
something = MainGame.property;
something2 = MainGame.property;
效率略低于
variable = MainGame.property;
something = variable;
something2 = variable;
?
答案 0 :(得分:1)
考虑在操作时引用事物。每一个"。"是一个操作,每个函数调用"()"是一个操作(和一个沉重的操作),每个" +"," - "等等。
事实上,某些方法会产生比其他方法更有效的代码。
但是。问题是,要感受低效方法的结果,您需要创建一个程序,每个帧执行数百万次操作(或相应难度的繁重任务)。如果您没有解析兆字节的二进制数据,或转换位图等,您不必担心性能问题。虽然担心性能和效率通常是一件好事。
如果您愿意衡量代码的效率,可以自由衡量其效果:
var aTime:int;
var a:int = 10;
var b:int = 20;
var c:int;
var i:int;
var O:Object;
aTime = getTimer();
O = new Object;
for (i = 0; i < 1000000; i++)
{
O.ab = a + b;
O.ba = a + b;
}
trace("Test 1. Elapsed", getTimer() - aTime, "ms.");
aTime = getTimer();
O = new Object;
c = a + b;
for (i = 0; i < 1000000; i++)
{
O.ab = c;
O.ba = c;
}
trace("Test 2. Elapsed", getTimer() - aTime, "ms.");
aTime = getTimer();
O = new Object;
for (i = 0; i < 1000000; i++)
{
O['ab'] = a + b;
O['ba'] = a + b;
}
trace("Test 3. Elapsed", getTimer() - aTime, "ms.");
准备运行百万次迭代循环,使总执行时间超过1秒,否则精度将太低。