今日の私の問題はこれです:
私は多くの民間人を囲んでいますが、それらはarraylistに保存されているクラスです。
彼らが別の民間人のパニックを見たとき、彼らはパニックになり始めて、それは広がるでしょう。
まずStep()
、イテレーターをループして各クラス関数を呼び出します。次に、Step()
関数では、別の民間のイテレータを通過します。通過するときに、イテレータで他の民間人を見ることができるかどうかを検出しようとします。これは、パフォーマンス時間が0から50ミリ秒になり、市民が100人いる場合です。
これは私が修正する必要のある問題です。オブジェクトがポイントaからポイントbの邪魔になっているかどうかを簡単に検出できるようにしようとしました。
見通し線のコードは次のとおりです。
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;
}
頭痛の種がある場合、基本は次のとおりです。
次のように使用して、その間の10ポイントを計算し、それが内部にあるかどうかを検出し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;
}
}
私の質問は次のとおりです。大量のパフォーマンスに深刻な影響を与えないこの見通し線を検出する簡単な方法はありますか?フィードバックはありますか?
LOS.txt
2.すべてのコードを表示する必要はありません。SSCCEを提供します。