2013-04-17 12 views
9

So im libgdx, ein Platformer. Ich benutze quadratische Fliesen für die Plattformen, aber wenn sie gezeichnet werden, haben einige von ihnen Lücken zwischen ihnen. Wenn ich die Kamera vergrößern/verkleinern oder die Kamera um die Lücken bewegen, verschieben Sie die Position. Hat jemand das gleiche Problem oder weiß wie es es beheben kann?Lücken zwischen gekachelten Texturen mit libgdx

Ein wenig mehr Detail. Fliesen sind Größe 32 und haben Texturen von 32 und 64 versucht. Fliesen sind 32 auseinander z. die erste Kachel wäre x = 0 y = 0 Sekunde x = 32 y = 0 usw. sowohl in x- als auch in y-Richtung. Die Lücken sind keine Texturartefakte, wie ich das oft überprüft habe. Verwenden des Texturpackers mit Padding. Meine beste Vermutung ist, dass es ein Problem ist, wenn man die Texturen auf Bildschirmkoordinaten umrechnet, aber wirklich keine Ahnung, wie man das beheben kann. Ich hätte gedacht, dass dieses Problem vorher aufgetreten ist, aber nirgends irgendwelche Korrekturen finden konnte. Ich habe meine Präzision mit Fliesengrößen überprüft und doppelt überprüft und ausgerichtet.

Jede Hilfe würde sehr geschätzt werden. danke.

Antwort

4

Bleeding

Gaps

Die kurze Antwort ist, dass es Ihre Filter sein kann, die wahrscheinlich NÄCHSTE eingestellt werden muss.

könnte auch die Arbeits Tutorials auf Libgdx.

6

Nun prüfen wollen, ich bin hier um den Tag zu retten!

Die Lösung heißt "Edge padding". Wenn Sie jetzt mit Tilesets arbeiten, kann ich Ihnen versichern, dass dies funktioniert.

Persönlich verwende ich Tiled, die mir erlaubt, Rand und Abstand in meinen Tilesets anzupassen. Der einzige Nachteil dabei ist, dass Sie GIMP mit diesem Plugin verwenden müssen: http://registry.gimp.org/node/26044

Mit diesem Plugin können Sie Edge-Padding auf Ihre Tileset anwenden und voila! Keine hässlichen Artefakte mehr.

3

Es heißt "Textur Bleeding". Sie müssen Ihren Kacheln Füllstoffe hinzufügen, damit die Textur nach dem Leeren der Textur die richtigen Pixeldaten sammeln kann, um die Lücke zu füllen.

2

Ich weiß, dass es etwas spät ist, auf diesen Beitrag zu antworten, aber als ich nach einer Lösung suchte, kam ich hierher.

Für mich fand ich jedoch eine viel einfachere Möglichkeit, das Flackern oder Lücken, die zufällig zwischen den Fliesen erscheinen, loszuwerden.

Ich habe einfach eine Besetzung zu den sehr langen Dezimalzahlen ich für die Position des Spielers bekam:

camera.position.set((int)robot.position.x, (int)robot.position.y, 0); 

, dass der Spieler sehr seltsam gemacht bewegen und ihn sanft wieder zu machen verschiebe ich eine Besetzung seiner Render-Methode hinzugefügt auch:

batcher.draw(robotSprite, (int)robot.position.x, (int)robot.position.y, 16, 16); 

Et voilà! Perfekt für mich arbeiten.

9

Hier ist ein weiterer später Beitrag, aber ich habe gerade angefangen, mit LibGDX zu arbeiten, und ich habe das gleiche Problem. Ich habe es behoben, indem ich das duplicatePadding-Feld der TexturePacker.Settings-Klasse auf true gesetzt habe.

Beispielcode:

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

Settings settings = new Settings(); 
     settings.maxWidth = 1024; 
     settings.maxHeight = 1024; 
     settings.duplicatePadding = true; 
     TexturePacker.process(settings, "source", 
       "destination", "name"); 
+0

duplicatePadding! Vielen Dank! – Pasha

+0

duplicatePadding löste mein Problem auch – Aleris

+0

Ok und wie benutzt du das eigentlich ...? Was soll in "Quelle" "Ziel" und "Name" gehen ?? source = tileset Ich glaube? – SuppressWarnings

1

würde ich meine Lösung hier posten und was hatte ich versucht, für Libgdx über dieses Problem.

-

T1. Erstellen Sie ein Original-Spritesheet (keine Atlas-Datei), das von irgendwo auf Padding 2 heruntergeladen wurde.

A1. Dies würde für das Umpacken der spritesheet unmöglich sein, dass kein Atlas haben, auch wenn Sie ein Stück/Splitter-Tool zu finden, sollte es ein paar Bilder, die richtig für TiledMap (TMX)

A1 umpacken sein müssen (Aktualisiert). Skript, das von @Nine Magics zur Verfügung gestellt wird, wäre der beste Weg, dies zu tun! (Ich benutze dies als meine endgültige Lösung)

-

T2. Verwenden TiledMapPacker die von Libgdx-nighty oder GDX-toolg vorgesehen ist, sollte der Chargencode sein:

java -classpath "gdx.jar";"gdx-natives.jar";"gdx-backend-lwjgl.jar";"gdx-backend-lwjgl-natives.jar";"gdx-tiled-preprocessor.jar";"extensions/gdx-tools/gdx-tools.jar" com.badlogic.gdx.tiledmappacker.TiledMapPacker "PathToYourProject\android\assets\RawMap" "PathToYourProject\android\assets\Map" --strip-unused 

A2. Die Ausgabe .tmx, die nicht von Tiled gelesen werden konnte Wenn Sie komplexe Ordnerpfad verwenden, um Ihre .png Dateien zu kategorisieren. Und möglicherweise konnte die Ausgabedatei nicht geladen werden, indem AtlasTmxMapLoader.

-

T3. Kamerapositionskorrektur, Kameraposition zu Ganzzahl machen. Der Code mochte @Julian oder @strangecat von libgdx tiledmap flicker with Nearest filtering

A3. Ich benutze diese Lösung für kein Problem und poste auch meinen Code, der sich von ihnen unterscheidet.

float cameraX = (int)(mainCamera.position.x * Game.PPM_X)/Game.PPM_X; 
    float cameraY = (int)(mainCamera.position.y * Game.PPM_X)/Game.PPM_X; 
    float cameraZ = mainCamera.position.z; 
    mainCamera.position.set(cameraX, cameraY, cameraZ); 

und laden sie auch mit TmxMapLoader.Parameters

TmxMapLoader.Parameters params = new TmxMapLoader.Parameters(); 
    params.textureMinFilter = Texture.TextureFilter.Linear; 
    params.textureMagFilter = Texture.TextureFilter.Nearest; 
    params.generateMipMaps = true; 
    assetManager.load(TILED_MAP_SETS.FIRST_MAP, TiledMap.class, params); 

Wenn Sie PPM verwendet und wollen Pixel für Pixel bewegen, könnten Sie diese Ganzzahl-Korrektur für Ihr Spiel verwenden, wenn Sie nicht nur könnte konvertieren die Position zu Integer.

Ich habe fast den ganzen Tag verschwendet, um dies zu tun, hoffe diese Untersuchung könnte jedem Spieleentwickler helfen :)

Verwandte Themen