2013-04-17 11 views
9

Quindi im usando libgdx, facendo un platform. Sto usando tessere quadrate per le piattaforme, ma quando vengono disegnate alcune di esse hanno degli spazi tra loro. Quando eseguo lo zoom avanti/indietro o muovo la fotocamera intorno alla posizione di spostamento degli spazi vuoti. Qualcuno ha avuto lo stesso problema o sa come lo risolve?Ottenere spazi vuoti tra le trame affiancate con libgdx

Un po 'più in dettaglio. le tessere hanno la dimensione 32 e hanno provato le trame di 32 e 64. Le tessere sono allineate a 32, ad es. la prima tessera sarebbe x = 0 y = 0 secondo x = 32 y = 0 e così via in entrambe le direzioni xey. Le lacune non sono artefatti di texture, come ho verificato molte volte. Utilizzo di texturepacker con padding. La mia ipotesi migliore è che si tratta di un problema quando si convertono le trame in schermate ma in realtà non si ha idea di come risolvere il problema. Avrei pensato che questo problema si fosse verificato prima, ma non ho trovato nessuna soluzione da nessuna parte. Ho controllato e ricontrollato la mia precisione con le dimensioni delle piastrelle e allineandole.

Qualsiasi aiuto sarebbe molto apprezzato. grazie.

risposta

4

Bleeding

Gaps

La risposta breve è che potrebbe essere il vostro filtro, che ha bisogno che si possa al più vicino.

potrebbe anche voler controllare le esercitazioni che lavorano presso Libgdx.

6

Beh, io sono qui per salvare la giornata!

La soluzione si chiama "Edge padding". Ora, se stai lavorando con tileset, posso assicurarti che funzionerà.

Personalmente sto usando Tiled che mi permette di regolare il margine e la spaziatura nei miei tileset. L'unico svantaggio di questo è che dovrai utilizzare GIMP con questo plug-in: http://registry.gimp.org/node/26044

Questo plug-in ti consentirà di applicare il bordo di riempimento al tuo tileset e voilà! Niente più brutti artefatti.

3

Si chiama "texture bleeding". Devi aggiungere padding alle tue tessere in modo che quando la texture sanguina, possa raccogliere i dati pixel corretti per riempire il vuoto.

2

So che è un po 'tardi per rispondere su questo post, ma quando stavo cercando una soluzione sono venuto qui.

Tuttavia, per me ho trovato un modo molto più semplice per eliminare lo sfarfallio o gli spazi vuoti che appaiono casualmente tra le tessere.

ho semplicemente aggiunto un cast per i lunghissimi decimali ho ricevuto per la posizione del giocatore:

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

che ha reso il giocatore si muove molto stranamente e per fargli passare agevolmente di nuovo ho aggiunto un cast per il suo metodo render aswell:

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

Et voilà! Funzionando perfettamente per me.

9

Ecco un altro post in ritardo, ma ho appena iniziato a lavorare con LibGDX e ho avuto lo stesso problema. Ho risolto il problema impostando il campo duplicatePadding della classe TexturePacker.Settings su true.

codice di esempio:

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! Grazie! – Pasha

+0

duplicatePadding ha risolto il mio problema anche – Aleris

+0

Ok e come si usa questo ...? Cosa dovrebbe andare in "fonte" "destinazione" e "nome" ?? origine = tileset, credo? – SuppressWarnings

1

vorrei postare la mia soluzione qui e quello che avevo provato per Libgdx su questo problema.

-

T1. Realizza il foglio nativo originale (nessun file di atlante) scaricato da qualche parte nel padding 2.

A1. Questo sarebbe impossibile per il reimballaggio della spritesheet che non hanno atlante, anche se si trova uno strumento sezione/splitter, dovrebbe essere un po 'di immagini che devono essere correttamente per richiuderla TiledMap (.tmx)

A1 (aggiornato). Script fornito da @Nine Magics sarebbe il modo migliore per farlo! (Io uso questo come la mia soluzione finale)

-

T2. Uso TiledMapPacker quella fornita da libgdx-nighty o GDX-toolg, il codice batch dovrebbe essere:

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. L'output .tmx che non può essere letto da Tiled Se si utilizza il percorso di cartella complesso per categoria i file .png. E il caricamento del file di output potrebbe non riuscire a caricare entro il AtlasTmxMapLoader.

-

T3. Correzione posizione telecamera, imposta la posizione della fotocamera su intero. Il codice è piaciuto @ Julian o @ Strangecat da libgdx tiledmap flicker with Nearest filtering

A3. Io uso questa soluzione senza alcun problema e pubblichiamo anche il mio codice diverso da loro.

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); 

Ed anche caricarlo con 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); 

Se è stato utilizzato PPM e desidera spostare pixel per pixel, è possibile utilizzare questa correzione intero per il vostro gioco, se non si può solo convertire la posizione a numero intero.

Ho quasi perso tutto il giorno per fare slancio, spero che queste indagini possano aiutare tutti gli sviluppatori di giochi :)

Problemi correlati