Masalah saya hari ini adalah ini:
Saya memiliki banyak warga sipil di sekitar, mereka adalah kelas yang disimpan oleh daftar susunan.
Idenya adalah ketika mereka melihat kepanikan warga sipil, mereka akan mulai panik dan itu akan menyebar.
Pertama saya memanggil setiap Step()
fungsi kelas dengan perulangan melalui iterator. Kemudian pada Step()
fungsi ia melewati iterator sipil lain. Saat ia berjalan, ia mencoba mendeteksi apakah ia dapat melihat warga sipil lain di iterator, di sinilah waktu kinerja berjalan dari 0 hingga 50 Milidetik karena memiliki 100 warga sipil.
Ini adalah masalah yang harus saya perbaiki, saya mencoba membuat cara mudah untuk mendeteksi apakah ada benda yang menghalangi titik a ke titik b.
Berikut kode untuk saling berhadapan:
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;
}
Jika Anda sakit kepala, dasarnya adalah:
Ia menemukan 10 poin di antaranya dan mendeteksi apakah ada di dalam, menggunakan 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;
}
}
Pertanyaan saya adalah: Apakah ada cara yang lebih mudah untuk mendeteksi Line of Sight ini yang tidak terlalu memengaruhi kinerja saya dalam jumlah besar? Ada umpan balik?
LOS.txt
2. Kami tidak ingin melihat semua kode Anda. Berikan SSCCE .