Meu problema hoje é este:
Eu tenho muitos civis por aí, são classes armazenadas por um arraylist.
A idéia é que, quando virem outro pânico civil, começarão a entrar em pânico e isso se espalhará.
Primeiro, chamo a Step()
função de cada classe fazendo um loop através de um iterador. Então, na Step()
função, ele passa por outro iterador civil Enquanto ele tenta, tenta detectar se ele pode ver o outro civil no iterador, é aqui que o tempo de desempenho varia de 0 a 50 milissegundos por ter 100 civilianos.
Esse é o problema que eu preciso resolver, tentei facilitar o modo de detectar se algum objeto está no caminho do ponto a ao ponto b.
Aqui está o código para a linha de visão:
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;
}
Se você está com dor de cabeça, os fundamentos são:
Ele mostra 10 pontos no meio e detecta se está dentro, usando 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;
}
}
Minha pergunta é: Existe uma maneira mais fácil de detectar essa linha de visão que não afeta severamente meu desempenho em grandes números? Algum feedback?
LOS.txt
2. Não queremos ver todo o seu código. Forneça um SSCCE .