Vấn đề của tôi hôm nay là thế này:
Tôi có nhiều thường dân đi khắp nơi, họ là những lớp được lưu trữ bởi một danh sách mảng.
Ý tưởng là khi họ thấy một sự hoảng loạn dân sự khác, họ sẽ bắt đầu hoảng loạn và nó sẽ lan rộng.
Đầu tiên tôi gọi mỗi Step()
hàm lớp bằng cách lặp qua một trình vòng lặp. Sau đó, trong Step()
chức năng, nó đi qua một trình lặp dân sự khác Khi đi qua, nó cố gắng phát hiện xem nó có thể nhìn thấy các thường dân khác trong trình vòng lặp hay không, đây là lúc thời gian thực hiện từ 0 đến 50 Millisecond vì có 100 thường dân.
Đây là vấn đề tôi cần khắc phục, tôi đã cố gắng thực hiện một cách dễ dàng để phát hiện xem có bất kỳ đối tượng nào theo cách từ điểm a đến điểm b không.
Đây là mã cho đường ngắm:
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;
}
Nếu bạn đau đầu, các nguyên tắc cơ bản là:
Nó chỉ ra 10 điểm ở giữa và phát hiện xem nó có ở bên trong hay không, bằng cách sử dụng 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;
}
}
Câu hỏi của tôi là: Có cách nào dễ dàng hơn để phát hiện Đường ngắm này mà không ảnh hưởng nghiêm trọng đến hiệu suất của tôi với số lượng lớn không? Bất kỳ thông tin phản hồi?
LOS.txt
2. Chúng tôi không muốn xem tất cả mã của bạn. Cung cấp một SSCCE .