Добрый день!
Вопрос, хочу добавить в игру, что бы объекты хотя бы пытались избегать столкновений
Что есть, 5-7 врагов (enemyOne), немного простенького ИИ, что бы они пытались при близком прохождении уходить в бок, а когда подальше наоборот поворачиваться в сторону игрока и стрелять. Я буду вводить столкновения и попадания enemyOne вдруг в друга, соответственно они будут часто толкаться и стрелять друг в друга, хочу немного уменьшить столкновения, дабы они друг друга не поубивали сами. Что есть: пул из enemyOne и немного кода ниже. Я как понимаю придётся подобную схему делать вне класса enemyOneClass, так как он не знает о других экземплярах класса и их координат. Очень интересно мне такое организовать, будет ли это крайне ресурсоёмко?
Код AS3:
package EnemyClass {
import flash.events.Event;
import flash.display.MovieClip;
import OptionClass.GlobalVariableClass;
import BulletPackage.ControlBulletClass;
import PackageClass.ExhaustClass;
public class EnemyOneClass extends enemyOne_mc {
private var mainShip: MovieClip;
private var exhaustLeft: ExhaustClass = new ExhaustClass();
private var exhaustRight: ExhaustClass = new ExhaustClass();
private var gl_variable: GlobalVariableClass = new GlobalVariableClass();
private var speed: uint;
private var rotationEnemy: int;
public function EnemyOneClass() {
}
public function fn_mainShip(_mainShip): void {
speed = gl_variable.speedEnemyOne;//все основные характеристики, сильно влияющие на баланс содержаться отдельно
mainShip = _mainShip; //корабль игрока
//тут ничего важного, небольшая анимация полёта
exhaustLeft.scaleX = 0.3;
exhaustLeft.scaleY = 0.45;
exhaustLeft.x = 40;
exhaustLeft.y = 20;
exhaustLeft.rotation = -90;
this.addChild(exhaustLeft);
exhaustRight.scaleX = 0.3;
exhaustRight.scaleY = 0.45;
exhaustRight.x = 40;
exhaustRight.y = -20;
exhaustRight.rotation = -90;
this.addChild(exhaustRight);
}
public function fn_playEnemy(e: Event): void {
if ((Math.abs(mainShip.x - x) > 150) && (Math.abs(mainShip.y - y) > 150)) { //задано расстояние, при котором меняется поведение класса
var angl: Number = (Math.atan((y - mainShip.y) / (x - mainShip.x))) / Math.PI * 180;
if (rotation > angl)
rotation -=2;
if (rotation < angl)
rotation +=2;
x -= speed * Math.cos(rotation * Math.PI / 180);
y -= speed * Math.sin(rotation * Math.PI / 180);
} else {
if (rotation > 180)
rotation +=3;
if (rotation < 180)
rotation -=3;
x -= speed * Math.cos(rotation * Math.PI / 180);
y -= speed * Math.sin(rotation * Math.PI / 180);
}//ничего важного ниже нет
if (x > stage.stageWidth - 30) {
x = 30;
}
if (x < 30) {
x = stage.stageWidth - 30;
}
if (y > stage.stageHeight - 30) {
y = 180;
}
if (y < 180) {
y = stage.stageHeight - 30;
}
}
}
}