Mein Problem heute ist folgendes:
Ich habe viele Zivilisten, sie sind Klassen, die von einem Arraylisten gespeichert werden.
Die Idee ist, wenn sie eine weitere zivile Panik sehen, werden sie in Panik geraten und sie wird sich ausbreiten.
Zuerst rufe ich jede Klassenfunktion auf Step()
, indem ich einen Iterator durchlaufe. Dann Step()
durchläuft es in der Funktion einen anderen Civillian-Iterator. Während es durchläuft, versucht es zu erkennen, ob es den anderen Civillian im Iterator sehen kann. Hier geht die Leistungszeit von 0 auf 50 Millisekunden für 100 Civillians.
Dies ist das Problem, das ich beheben muss. Ich habe versucht, auf einfache Weise festzustellen, ob sich Objekte im Weg von Punkt a bis Punkt b befinden.
Hier ist der Code für die Sichtlinie:
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;
}
Wenn Sie Kopfschmerzen haben, sind die Grundlagen:
Es ermittelt 10 Punkte dazwischen und erkennt mithilfe von 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;
}
}
Meine Frage ist: Gibt es eine einfachere Möglichkeit, diese Sichtlinie zu erkennen, die meine Leistung in großer Zahl nicht stark beeinträchtigt? Irgendeine Anregung?
LOS.txt
2. Wir möchten nicht Ihren gesamten Code sehen. Stellen Sie eine SSCCE bereit .