2020년 2월 23일 일요일

tiled map ( .tmx ) 사용할때 타일에서 공간이 생기는 버그


cocos2d에서 .tmx 파일을 불러와 사용할때 아래 그림과 같이 공간이 생기는 버그를 볼 경우가 있다.


이때는 tiled map editor의 버전이나 cocos2d-x의 버전을 바꿔도 해결이 안된다.

\cocos2d\cocos\base 폴더에 보면 ccConfig.h 파일이 있다.
여기에 아래 부분을 변경해 주면 된다.

#ifndef CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
#define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1
#endif

위 값이 0으로 되어 있는것을 1로 바꿔 주면 된다.
이 방법으로 하면 계산 방식이 바뀌면서 문제는 해결되지만 프레임 드롭이 약간 생기는것을 발견했다 ( 2~3 정도로 미미하지만 찜찜한 수준 ^^ )

근본적인 해결책은 아래 URL에 나와있는대로 이미지 생성 자체를 바꿔야한다.
https://discuss.cocos2d-x.org/t/avoiding-artifacts/19733/7

아래는 사이트에서 발췌한 내용
  1. Download Texture Packer if your haven’t already. Do it! It’s free and it’s a great tool for creating 2d sprite sheets. Also we need it’s border padding and shape padding features. Download here: https://www.codeandweb.com/texturepacker/download 10
  2. Open Texture Packer.
  3. Under the texture section, change png opt level to 0, unless you’re using the pro version. Also, unless you’re using the pro version, click show advanced under the layout section and uncheck detect identical sprites.
  4. Under the layout section, change the algorithm to basic, and sort by to name. This will arrange your tiles by alphabetical order, allowing you to choose . Here’s an example as to how to name your sprites: “01_whole_block.png, 02_half_block.png.”
  5. Drag and drop, or import your sprites into Texture Packer.
  6. Under the sprites section, switch trim mode to none, and change border padding and shape padding both to 1.
  7. Go ahead and click publish sprite sheet and save it to wherever.
  8. Open Tiled and create a new map. Keep the tile size to the exact size of your tiles without the padding.
  9. Click Map > New Tileset. Keep the tile width and height to the exact size of your tiles without the padding. Change Margin and Spacing both to 1px. Import your sprite sheet.
  10. Create an awesome tile map and save it out. Import it into your project and click on the file to edit the .tmx file.
  11. Inside the map tag change the tilewidth and tileheight to 1 pixel less than their original size. In my case they were 138 px, so I changed them both to 137 px. Do not change the tilewidth and tileheight inside the tileset tag.
참고로 나는 아직 해보지 않았음 ^^