저는 타워 방어 게임을하고 있습니다. 방어하는 포탑이 그 범위 내에서 가장 멀리있는 공격 유닛에서 쏘고 싶습니다. 나는 그것을 자바에서 프로그래밍하고 유닛을 보유하기 위해 ArrayLists를 사용한다.경로의 단위 목록을 순서대로 유지하려면 어떻게합니까?
지금까지 경로가 각기 다른 블록으로 나뉘어져 있으며 각 블록의 단위 목록이 있습니다. 유닛이 블록을 떠날 때 경로의 다음 블록으로 전달됩니다. 단위가 모두 같은 속도로 이동하면 목록에서 첫 번째 단위가되기 때문에 어떤 단위가 가장 먼지 쉽게 추적 할 수 있습니다. 그러나 유닛들이 다른 속도로 움직일 수 있기를 바랍니다.
유닛이 블록에 추가되면 arraylist의 끝에 추가됩니다. 따라서 이전에 추가 된 유닛은 목록의 앞에 있고 최근에 추가 된 유닛은 목록의 끝에 있습니다.
나의 원래 생각은 각 유닛이 arraylist에서 유닛보다 더 낮은 유닛을 경로를 따라 더 멀리 있는지 확인하도록하는 것이 었습니다. 그럴 경우 arraylist를 올바른 지점으로 이동합니다. 이런 종류의 블록은 블록을위한 많은 추가 작업처럼 보입니다. 그리고 게임이 많이 느려지는 것이 아닌가 걱정됩니다.
좋은 생각인가요? 아니면 다른 것을 시도해야합니까? 도움이 될만한 코드가 있으면 게시 할 수 있습니다.
지금 두 번째 옵션을 구현하고 있습니다. 제대로 작동하는 것처럼 보입니다. 내 유일한 질문은 내가 공격 유닛 위치를 업데이트해도 게임 세트가 계속 유지 될 것인가? – Jonathan
각 블록에 대해 별도의 트리 집합으로 구현했지만 대부분의 경우 작동하지만 블록이 해당 트리 집합에서 하나의 단위를 제거하려고 시도 할 때가 있습니다. 일부 중단 점을 통해 유닛이 트리 집합에 있고 다음 블록으로 전달되는 것을 볼 수 있지만 treeset.remove (unit)가 false를 반환하는 방법을 확인할 수 있습니다. – Jonathan
TreeSet의 순서는 필요에 따라 계산됩니다. 즉, 반복을 시도하거나 가장 낮은 값을 팝하는 경우입니다. 그것이 내가 당신을 위해 효과가 있다고 생각하는 이유입니다. ArrayList는 순서가 계속 걱정됩니다. 각 세트에서 "가장 낮은"것을 잡아서 다음 세트로 이동하는 것에 관심이 있습니다. treeSet.remove()가 false를 반환하면 객체가 해당 집합에 없다는 것을 의미합니다. 아마도 다른 주제 일지라도 그곳에서 무엇이 잘못되었는지를 알아 내기 위해 코드를보아야 할 것입니다. – jbrookover