ゲームを作成していて、Adobe Scout でテストすると、この関数が原因で予算を 600% 超えていると表示されます checkMainGunMissleHitZapper();
それで、それらがそれを最適化する方法であるかどうか疑問に思っていました。ミサイルは配列であり、敵も配列によって処理されるため、これは二重の for ループです。
ヒットテストが 2 つのオブジェクト間で行われるたびに、画面が完全に一時停止し、主にモバイル デバイスでパフォーマンスが低下します。
ループの設定方法は次のとおりです。
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 ループを最適化する方法はありますか?