타일 기반 지형 생성 시스템에서 작업 중이며 약간의 걸림 소리가 발생했습니다. 나는 물과 땅 사이의 천이를 표시 할 일련의 전이 타일을 만들기를 원하며 어떤 타일을 사용해야 하는지를 파악하는 효율적인 방법을 찾는 데 어려움을 겪고있다.Android - 주변 타일을 기반으로 타일 비트 맵을 결정합니다.
첫 번째 시도는 기본적으로 각 타일을 일련의 if 문을 통해 실행하여 어느 타일을 사용해야하는지 파악합니다. 이 문제의 주된 문제점은 100 타일 × 100 타일의 세계지도를 사용하면 주변의 8 타일 (80,000 개의 작업)에있는 데이터에 액세스 한 다음 최대 4 개의 if 문 (320,000 작업). 이것이 나에게 비현실적으로 비효율적이며 느릴 것으로 보인다.
이 방법의 장점은 토지 타일에서만 실행된다는 것이며, 먼저 적어도 하나의 물 타일에 인접 해 있는지 확인하여 필요한 작업 횟수를 크게 줄입니다.
내가 작성한 기본 차트는 주변 타일을 따라 걷고 적절한 타일을 선택합니다. 내가 갔다으로 타일을 할당, 양 방향으로 해안을 따라 해안 타일을 공격하면
내 두 번째 생각은, 본질적으로 타일을 걷는 시작이었다. 이 방법은 기와가 시작하기 전에 이미 파악되지 않았는지 확인합니다. 이 문제는 하나, 나는 그게 어떻게 작동하는지 알 수 없다. 둘째, 결과적으로 내가 얼마나 효율적인지 알지 못한다.
친구가 제 3의 방법이 효과가있을 것이라고 말했습니다. 물 타일을 가져 와서 0과 동일하게 설정하고 1로 설정된 랜드 타일을 설정합니다. 그런 다음 주변 타일을 가져 와서 1에서 9까지 숫자를 매 깁니다. 거기에서부터 0과 1의 문자열을 만듭니다.
W W W
W L L
L L L
가 될 것이다 : 000,011,111
0 * 2^0 + 0 * 2^1 + 0 * 2^2 + 0 * 2^3 + 1 * 2^4 + 1 * 2^5 + 1 * 2^6 + 1 * 2^7 + 1 * 2^8
0 * 1 + 0 * 2 + 0 * 4 + 0 * 8 + 1 * 16 + 1 * 32 + 1 * 64 + 1 * 128 + 1 * 126 = 496
이론은 타일 어소시에이트 조합 번호 496과 비교하여로드합니다. 문제는 각 가장자리에 13 또는 14 개의 조합이 있으므로 그 결과로 결과가 발생한다는 것입니다. 예를 들면 :
기본적으로W W L L W W
W L L and W L L Both need the same tile as the above example, but
L L L L L L produce different numbers.
, 내가 특정 타일 초래 물과 땅의 가능한 조합 각각에 대한 최종 수를 파악해야, 다음을 통해 마지막 수를 실행하는 것이이 방법을 수행하기 일련의 if/case를 사용하여 적절한 비트 맵을 선택합니다. 이것은 if 블록보다 비효율적입니다.
그럼,이 모든 것에 실제 질문이옵니다. 누구든지이 작업을 수행하는 다른 방법이나 이러한 방법 중 하나를보다 효율적으로 만드는 방법을 알고 있습니까?
해결책을 시도하고 아직 속도를 테스트 해 보셨습니까? 조숙 한 최적화를 시도하지 않으시겠습니까? – zarthross
아직은 기회가 없었습니다. 나는 모든 if 문을 실행하는 데 시간이 많이 걸릴 것이라는 가정에 기반한 대체 방법을 찾고있다. 나는 오늘 저녁 첫 번째 방법으로 통과 할 것이다. –
@Zathross 당신이 옳았다 고 생각합니다. 나는 초기 테스트와 맵에서 모든 사각형을 돌아 다니며 총 타일에 대한 정보를 수집하고 물을 확인한 다음 올바른 비트 맵을 할당하는 데 총 반환 시간이 평균 60 밀리 초가 걸린다. 그러나 일단 게임에서 보았을 때, 가능한 모든 육지 - 물 구성에 대한 설명이 어디에도 없었 음을 알았습니다. 필요한 타일 수를 두 배로 늘리거나 세배로 늘려서 세 번째 방법으로 다시 시도해 볼 수 있습니다. –