여기 내가 할 일을 ...
1) 현재 X, Y 문자 저장
2) X 방향으로 이동
3) 타일 데이터를 가져와 문자의 모든 구석을 확인하고 다음을 수행하여 단색인지 확인하십시오. (X와 Y는 문자 위치입니다)
- 왼쪽 상단 : 바닥 (X / tileWidth), 바닥 (Y / tileHeight);
- 오른쪽 상단 : floor ((X + characterWidth) / tileWidth), floor (Y / tileHeight);
- 왼쪽 아래 : floor (X + / tileWidth), floor ((Y + characterHeight) / tileHeight);
- 오른쪽 아래 : floor ((X + characterWidth) / tileWidth), floor ((Y + characterHeight) / tileHeight);
...지도 데이터에서 올바른 타일 데이터를 얻기 위해
4) 타일이 단단한 경우 저장된 X를 복원하여 X를 가능한 가장 좋은 위치로 강제해야합니다.
- 왼쪽으로 이동하는 경우 : X = floor (X / tileWidth) * tileWidth;
- 오른쪽으로 이동하면 X = ((floor ((X + characterWidth) / tileWidth) + 1) * tileWidth)-characterWidth;
5) Y를 사용하여 2-4 반복
캐릭터가 타일보다 키가 크면 더 많은 타일을 확인해야합니다. 이렇게하려면 tileHeight를 반복하여 characterY 위치에 타일을 추가해야합니다.
int characterBlockHeight = 3;
// check all tiles and intermediate tiles down the character body
for (int y = 0; y < characterBlockHeight - 1; y++) {
tile = getTile(floor(characterX / tileWidth), floor((characterY + (y * tileHeight)) / tileHeight));
... check tile OK....
}
// finally check bottom
tile = getTile(floor(characterX / tileWidth), floor((characterY + characterHeight) / tileHeight);
... check tile OK....
문자가 1 블록보다 넓은 경우 동일하게 수행하지만 characterY, characterHeight, tileHeight 등을 characterX, characterWidth 등으로 바꾸십시오.