Я медленно продвигаюсь в своей тестовой игре, и я дошел до того, что могу добавлять врагов на сцену через массив, они следуют за игроком и без проблем поворачиваются к игроку. Моя следующая задача — дать каждому противнику обнаружение столкновений друг с другом, иначе все они в конечном итоге просто полностью перекрывают друг друга, а это не очень реалистично.
Вот мой код пока только в отношении врагов:
public function initEnemy():void
{
enemyArray = new Array();
for (var i = 0; i < 2; i++)
{
var enemy:Enemy = new Enemy((Math.random() *500 + 20), (Math.random() * 200 + 50));
stage.addChild(enemy);
enemyArray.push(enemy);
}
}
public function enemyBehavior():void
{
var enemyRotation:int;
for (var i:int = 0; i < enemyArray.length; i++)
{
var enemy = enemyArray[i];
var dx:int = enemy.x - player.x;
var dy:int = enemy.y - player.y;
var dr:int = dx * dx + dy * dy;
var dr2:int = Math.sqrt(dr);
enemy.x -= enemySpeed * dx / dr2;
enemy.y -= enemySpeed * dy / dr2;
enemyRotation = -(Math.atan2(enemy.x - player.x, enemy.y - player.y) * 180 / Math.PI);
trace(enemyRotation);
enemy.rotation = enemyRotation;
if (enemy.hitTestObject(enemyArray[i+1]))
{
enemy.x -= -enemySpeed;
enemy.y -= -enemySpeed;
}
Так вот где я застрял. В части вражеского.hitTestObject изначально у меня был просто вражеский хиттестирующий врага, но это заставило врага самому тестировать попадание и полностью испортило движение и вращение. Поэтому я попробовал вместо этого то, что у нас есть выше, ударил по тесту каждого экземпляра врага с экземпляром врага, следующим в следующем месте в массиве, и это работает с большинством врагов, но не со всеми, и выдает ошибку, потому что последний экземпляр в массиве будет пытаться выполнить проверку экземпляра, который не существует, и это приведет к огромному снижению производительности.
Может ли кто-нибудь дать мне какое-то направление, как лучше проверить эти объекты из массива, который более удобен для производительности?