현재 나는 타일 기반 게임 (테라 리아를 생각하지만 환상적이지는 않다고 생각합니다)입니다.
어쨌든, 나는 현재 충돌 감지 작업을 수행하고 있습니다 (코너 케이스조차도!). 스프라이트가 블록을 통과하지 않는 것을 보는 것은 매우 만족스러운 일입니다. 그러나 벤치마킹 아이디어가있었습니다. 나쁜 생각.
1,000 제곱, 문제 없습니다. 10,000 자, 3 자에 대해서는 일종의 게으르다. 3 명의 캐릭터에 대해 10 만 제곱 (실제로 큰 맵)을 재생할 수 없었습니다.
플레이어, 캐릭터, 아이템 등에서 너무 멀리 떨어진 블록을 고려하고 싶지 않지만 메모리에 블록을 지속적으로로드하고 싶지 않은 문제가 있습니다.
지금까지 내 알고리즘은 다음과 같습니다.
foreach (Block in level)
{
if (distance from block to player > a specified amount)
ignore this block;
else
{
get the intersection depth between the two bounding boxes
if (depth of intersection != Zero-vector)
{
check y size vs x size
resolve on smallest axis
}
}
}
알다시피, 레벨 크기가 커지면이 알고리즘의 차수는 N 블록 씩 커집니다. 나는 플레이어 근처에 있지 않은 블록도 고려하고 싶지 않습니다.
목록 대신 (0,0) ~ (mapWidth, mapHeight) 이중 배열 블록을 사용하여 사람의 위치에 따라 위험 영역을 계산합니다 (예 : 플레이어의 위치가 (10, 20) 인 경우) (0, 10)에서 (20, 30) 등으로 보입니다.
모든 생각과 고려 사항은 훌륭합니다. 감사합니다.