Mon problème aujourd'hui est le suivant:
J'ai beaucoup de civils qui circulent, ce sont des classes stockées par un arrayliste.
L'idée est quand ils voient une autre panique civile, ils vont commencer à paniquer et ça va se propager.
D'abord, j'appelle chaque Step()
fonction de classe en passant en boucle dans un itérateur. Ensuite, dans la Step()
fonction, il passe par un autre itérateur civillian.Au fur et à mesure, il essaie de détecter s'il peut voir l'autre civillian dans l'itérateur, c'est là que le temps de performance passe de 0 à 50 millisecondes pour avoir 100 Civillians.
C'est le problème que je dois résoudre, j'ai essayé de trouver un moyen facile de détecter si des objets gênent du point a au point b.
Voici le code de la ligne de visée:
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;
}
Si vous avez mal à la tête, les principes fondamentaux sont:
Il détermine 10 points entre les deux et détecte s'il se trouve à l'intérieur, en utilisant 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;
}
}
Ma question est la suivante: existe-t-il un moyen plus simple de détecter cette ligne de visée qui n'affecte pas sérieusement mes performances en grand nombre? Tous les commentaires?
LOS.txt
2. Nous ne voulons pas voir tout votre code. Fournir un SSCCE .