Моя проблема сегодня заключается в следующем:
У меня много гражданских, которые ходят, это классы, хранящиеся в архиве.
Идея в том, что когда они увидят очередную гражданскую панику, они начнут паниковать, и она распространится.
Сначала я вызываю Step()
функцию каждого класса , проходя через итератор. Затем в Step()
функции он проходит через другой цивиллианский итератор. При прохождении он пытается определить, может ли он видеть другой цивиллиан в итераторе, и здесь время выполнения составляет от 0 до 50 миллисекунд при наличии 100 цивиллиан.
Это проблема, которую мне нужно решить, я попытался найти простой способ определить, находятся ли какие-либо объекты на пути точка а в точку б.
Вот код для прямой видимости:
public static Object LOS(int x, int y, int x2, int y2, String Scan, Object Me, Object You) {
DirectionX = (x-x2)/Quality;
DirectionY = (y-y2)/Quality;
CurrentX = x;
CurrentY = y;
String[] ScanArray = Scan.split(":");
for(int I=0;I<=Quality;I++) {
for(String Type: ScanArray) {
if(Type.equals("Boxs")) {
Iterator it=Level.Boxs.iterator();
while(it.hasNext()) {
Box Box = (Box)it.next();
if(Me!=Box&&You!=Box) {
//Collision = Tools.Collision((int)(CurrentX-(Width/2)), (int)(CurrentY-(Width/2)), Width, Width, Box.GetX(), Box.GetY(), Box.GetWidth(), Box.GetHeight(), 1);
boolean Col = Tools.BasicCollision((int)(CurrentX-(Width/2)), (int)(CurrentY-(Width/2)), Width, Width, Box.GetX(), Box.GetY(), Box.GetWidth(), Box.GetHeight());
}
}
}
}
CurrentX-=DirectionX;
CurrentY-=DirectionY;
}
return null;
}
Если у вас болит голова, основные принципы:
Он вычисляет 10 точек между ними и определяет, находится ли он внутри, используя BasicCollision
:
public static boolean BasicCollision(int x, int y, int width, int height, int x2, int y2, int width2, int height2) {
if(x<x2+width&&x+width>x2&&y<y2+height&&y+height>y2) {
return true;
} else {
return false;
}
}
Мой вопрос: есть ли более простой способ обнаружить эту линию взгляда, которая не окажет серьезного влияния на мою производительность в больших количествах? Есть отзывы?
LOS.txt
2. Мы не хотим видеть весь ваш код. Предоставить SSCCE .