嘿家伙,所以我正在创建一个游戏,当我在Adobe Scout中测试它时说明了这个函数正在使它超过600%的预算checkMainGunMissleHitZapper();优化双循环
所以我想知道如果他们是一种方法来优化它。这是双重循环,因为导弹是阵列,敌人也是由数组处理的。
每当在两个对象之间发生命中测试时,屏幕就会完全暂停并主要在移动设备上降低性能。
这里是我设置的循环:
private function checkMainGunMissleHitZapper():void
{
//loop through al current missles
for (var i:int = 0; i < aMainGunMissleArray.length; i++)
{
//get current missle in loop
var currenMainMissle:mcMainGunMissle = aMainGunMissleArray[i];
//loop through all our enemies
for (var j:int = 0; j < aEnemyZapperArray.length; j++)
{
//get current enemy in j loop
var currentZapper:mcEnemyZapper = aEnemyZapperArray[j];
//test if current missle is hitting current enemy
if (currenMainMissle.hitTestObject(currentZapper))
{
//create an explosion
//create a new explosion instance/movieclip
var newZapperExplosion:mcEnemyZapperExplosion = new mcEnemyZapperExplosion()
//add our explosion to the stage
stage.addChild(newZapperExplosion)
//position explosion to enemy
newZapperExplosion.x = currentZapper.x
newZapperExplosion.y = currentZapper.y
//remove missle
currenMainMissle.destroyMainGunMissle()
//remove missle from missle array
aMainGunMissleArray.splice(i, 1);
//remove enemy on stage
currentZapper.destroyEnemyZapper()
//remove enemy from array
aEnemyZapperArray.splice(j, 1);
nScore += 20;
updateScoreText();
}
}
}
}
有些论坛,我读都在说,这将优化代码:
for (int k = 0; k < N * N; ++k) { int i = k/N; int j = k % N; }
但我甚至不会知道从哪里开始与。过去我的as3技能水平。
但你能看到任何方法来优化这些for循环?
通常情况下,通过将游戏区域划分为网格并将导弹/敌人分配到其当前网格平方(每平方2个阵列;一个用于导弹,一个用于目标)来解决多体对多碰撞问题。 。这大大减少了命中测试的次数(通常只检查相同的盒子/最近的邻居)。 – Dave
有趣的生病检查,谷歌。谢谢! – Nathan
你应该做的另一件事是尽可能使用半径检查; 'dx * dx + dy * dy
Dave