2014-01-27 4 views
0

내 게임 refactorying 내 TiledMaps 렌더링 성능을 높이기 위해 AltasTmxMapLoader 사용할 싶습니다. 나는 맵에 atlas 속성을 추가하는 작업에 몰두했다. 예를 들어이지도에 어디에 넣어야합니까?AtlasTmxMapLoader에 대한 atlas 속성을 추가 할 위치

<?xml version="1.0" encoding="UTF-8"?> 
<map version="1.0" orientation="orthogonal" width="10" height="10" tilewidth="32" tileheight="32"> 
<tileset firstgid="1" name="tile2" tilewidth="32" tileheight="32"> 
    <image source="tile2.png" width="512" height="512"/> 
</tileset> 
<tileset firstgid="257" name="mountain" tilewidth="32" tileheight="32"> 
    <image source="mountain.png" width="512" height="512"/> 
</tileset> 
<tileset firstgid="513" name="pubdlcnt" tilewidth="32" tileheight="32"> 
    <image source="pubdlcnt.png" width="512" height="512"/> 
</tileset> 
<tileset firstgid="769" name="snowWit" tilewidth="32" tileheight="32"> 
    <image source="snowWit.png" width="512" height="512"/> 
</tileset> 
<tileset firstgid="1025" name="tile2" tilewidth="32" tileheight="32"> 
    <image source="tile2.png" width="512" height="512"/> 
</tileset> 
<tileset firstgid="1281" name="tree+rock" tilewidth="32" tileheight="32"> 
    <image source="tree+rock.png" width="512" height="512"/> 
    <tile id="129"> 
    <properties> 
    <property name="blocked" value=""/> 
    </properties> 
    </tile> 
    <tile id="161"> 
    <properties> 
    <property name="move" value=""/> 
    </properties> 
    </tile> 
</tileset> 
<tileset firstgid="1537" name="trees" tilewidth="32" tileheight="32"> 
    <image source="trees.png" width="512" height="512"/> 
</tileset> 
<tileset firstgid="1793" name="trees2" tilewidth="32" tileheight="32"> 
    <image source="trees2.png" width="512" height="512"/> 
</tileset> 
<layer name="background1" width="10" height="10"> 
    <data encoding="base64" compression="zlib"> 
    eJzzZ2Bg8B/FgwYDAFyQHt0= 
    </data> 
</layer> 
<layer name="background" width="10" height="10"> 
    <data encoding="base64" compression="zlib"> 
    eJxjYGBgmISEGfDQi5AwAx76KBSPAtxgIysEowMAMnYKLw== 
    </data> 
</layer> 
<layer name="background" width="10" height="10"> 
    <data encoding="base64" compression="zlib"> 
    eJybxMDAcBqIJxGgFwHxbSJoUsA1IL6OR/4XlD4KxSMBAAA87BJ0 
    </data> 
</layer> 
<layer name="foreground1" width="10" height="10"> 
    <data encoding="base64" compression="zlib"> 
    eJxjYCAOzCdCzTwofQyIj+NR94pIO0m1l5pgoOwFACVaBi8= 
    </data> 
</layer> 
<layer name="blocked" width="10" height="10"> 
    <data encoding="base64" compression="zlib"> 
    eJxrYmVgaKIiJgUQ0kOqeUMJLGKFYHQAAKpXDXA= 
    </data> 
</layer> 
</map> 

이미지도 태그와 타일 세트 태그에 추가하여 시도했지만 이미 올바른 해결책이 아닙니다. 나는 이미 atlas를 tmx 파일과 동일한 폴더에 넣어야한다는 것을 알아 차 렸지만 태그를 어디에 넣을 지 궁금합니다.


Exception in thread "main" java.lang.NoClassDefFoundError: com/badlogic/gdx/util 
s/GdxRuntimeException 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Class.java:2531) 
     at java.lang.Class.getMethod0(Class.java:2774) 
     at java.lang.Class.getMethod(Class.java:1663) 
     at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) 

Caused by: java.lang.ClassNotFoundException: com.badlogic.gdx.utils.GdxRuntimeEx 
ception 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     ... 6 more 

답변

1

그냥 소스에 아틀라스 속성을 두는만큼 쉬운 일이 아닙니다.

xml에 설명 된 타일이 아틀라스를 전혀 참조하지 않기 때문에이 속성은 사용되지 않습니다.

TiledMapPacker이 파일을 덮어 쓰게하는 것이 필요합니다. 지도를 전처리하고, 최적화 된 아틀라스 파일을 만들고, XML에 속성을 추가합니다. 그래야만 AltasTmxMapLoader을 사용하여 해당 파일을 올바르게로드 할 수 있습니다.

내가 어떻게 작동하는지에 대한 설명은 my posts here을 참조하십시오.

libgdx 공식 배포 도구에는 필요한 모든 것이 포함되어 있어야합니다.

java -classpath "gdx.jar";"gdx-natives.jar";"gdx-backend-lwjgl.jar";"gdx-backend-lwjgl-natives.jar";"gdx-tools.jar";"gdx-tiled-preprocessor.jar" com.badlogic.gdx.tiledmappacker.TiledMapPacker "processed/input" "processed/output" "--strip-unused" 

코어 메인 클래스/프로젝트의 내부를 넣어 코드에서 실행하려면 : 내가이 명령을 실행하는 데있어에게

Settings settings = new Settings(); 
    settings.maxWidth = 2048; //modify if needed 
    settings.maxHeight = 2048; //modify if needed 
    settings.fast = true; //fast should be fine here! 
    //all tiles have a 1px padding. better for not getting artifacts 
    TiledMapPacker pack = new TiledMapPacker(); 
    try 
    { 
     pack.processMaps(
       new File(
         "PATH-TO-INTPUT"), 
       new File(
         "PATH-TO-OUTPUT"), 
       settings); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

이것은 퇴행을 초래합니다. 스택을 추가했습니다. extensionfolder로 이동하여 명령을 입력했습니다. befor 그 폴더를 처리/입력 및 출력 같은 디렉토리에 추가하고 일부 tmx 파일을 포함합니다. inputfolder에 타일셋 – BennX

+0

내가 그것을 해결했지만 커맨드 라인을 통해 아닙니다. coreprojekt 내부에 추가 했으므로 시작되었습니다. 게시물을 편집하고 정답으로 확인하십시오. 감사. 하지만 그건지도를 망칠뿐입니다. 이유는 아직 모른다. badlogicgames 포럼에 게시 – BennX

0

나는 최근에이 문제에 겪었 libGDX 1.5.5를 사용하고 TiledMapPacker 클래스를 사용하려고했습니다.

그러나 according to the official forums은 2015 년 2 월에 더 이상 지원되지 않습니다.

어느 새 프로젝트를 만들거나 도구 확장이 추가되었는지 확인하십시오 libGDX 1.5.5와

, 내 프로젝트에지도 책/포장 타일 맵을 사용하려면 다음 단계를 갔다 귀하의 프로젝트 (저는 새 프로젝트를 선택했습니다). 나는 또한 안드로이드와 데스크톱을 개발 중이다.

안드로이드 자산 디렉토리에서 원시 및 압축 된 디렉토리를 생성하고 스프라이트 PNG 및 Tiled .tmx 파일을 넣습니다.

.tmx 파일에서 atlas이라는지도 수준 속성을 추가하고 프로젝트에 적합한 파일 이름으로 설정합니다. 나중에 사용하겠습니다.

.

<map version="1.0" orientation="isometric" renderorder="left-up" width="5" height="5" tilewidth="128" tileheight="64" nextobjectid="1"> 
<properties> 
    <property name="atlas" value="tiledexampletiles.atlas"/> 
</properties> 
<tileset firstgid="1" name="City - Roads" tilewidth="133" tileheight="123"> 

당신이 DesktopLauncher.java 파일에 다음 가져 오기를 할 것입니다 데스크탑 프로젝트에서 : 안드로이드 스튜디오 (또는 편집기)에서 TMX 파일, 당신은 파일의 맨 위에 다음과 같은 것을 찾을 수 있습니다

import com.badlogic.gdx.tools.texturepacker.TexturePacker; 

이제 실제로는 아틀라스를 생성하려면 TexturePacker.process()을 사용하십시오.

public class DesktopLauncher { 
    public static void main (String[] arg) { 
     TexturePacker.Settings settings = new TexturePacker.Settings(); 
     // If your images are numbered, but not for animation, you'll probably need this. 
     settings.useIndexes = false; 

     TexturePacker.process(settings, "raw", "packed", "tiledexampletiles.atlas"); 

     LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); 

     new LwjglApplication(new LibGDXToolsApp(), config); 
    } 
} 

데스크톱 응용 프로그램을 실행하면 Android 자산 디렉토리에 필요한 atlas 파일과 png가 생성됩니다. 당신이 응용 프로그램을 구성해야하는 경우

the steps to configure an application in Android Studio 1.1.x은 다음과 같습니다

  1. 실행을 선택> 편집 구성
  2. 왼쪽 상단 모서리를 선택 응용 프로그램에서 +을 클릭합니다.
  3. 메인 클래스를 데스크톱에 사용하고 메인 클래스를 DesktopLauncher로 지정하고 (예 : com.jamesrskemp.libgdxToolsApp.desktop.DesktopLauncher) 작업 디렉토리를 안드로이드 에셋 디렉토리 (C:\path\to\LibGDXToolsApp\android\assets)로 설정하고 마지막으로 'modpath의 클래스 패스 사용'을 desktop .
관련 문제