Domanda

Sto scrivendo un motore sprite di base per il mio divertimento e per conoscere meglio l'API 2D di Java. Attualmente sto usando un gran numero di file .png separati con sfondi trasparenti per rappresentare i vari sprite e i diversi frame di animazione di cui ho bisogno. La maggior parte dei progetti di sviluppo di giochi "del mondo reale" sembrano fare uso di "fogli sprite" che contengono più sprite o frame di animazione in un singolo file. Inoltre, anziché utilizzare il supporto per la trasparenza dell'immagine nativa, le persone spesso nominano un colore arbitrario che non appare nella palette degli sprite come colore trasparente. Come si gestisce un file come questo a livello di codice?

  • come fai a sapere dove uno sprite inizia e inizia il successivo
  • come gestisci la trasparenza

Potrebbero esserci altri fattori a cui non ho pensato qui, quindi potrei aggiungere all'elenco sopra mentre penso alle cose o quando le persone danno suggerimenti (per favore fallo nei commenti).

È stato utile?

Soluzione

Attualmente uso file XML generati da un semplice editor di sprite che memorizza lo sprite come una raccolta di pose (opzionalmente animate), che sono a loro volta una raccolta di frame o celle. I frame memorizzano informazioni per frame come l'offset xey del frame nel foglio, la larghezza e l'altezza della cella e qualsiasi trasformazione (ridimensionamento / rotazione / tonalità / ecc.). Le pose memorizzano i singoli fotogrammi e le informazioni sull'animazione (velocità, ad esempio) e un nome di posa per identificarli facilmente nel programma (hero.pose = sprite.pose [" standing_right "]). Gli sprite servono come radice del documento per contenere diverse pose, come una posa per ciascuna direzione di fronte.

Un'alternativa meno flessibile che ho usato prima era quella di specificare dimensioni fisse per celle e fogli e calcolare offset e dimensioni dei frame in base a questi valori (ad esempio, la larghezza è sempre di 32 pixel, quindi il terzo sprite è a 32 * 2). Successivamente ho iniziato a specificare queste dimensioni nel nome del file (ad esempio nome_sprite_32x64.png) per gli sprite che non si adattano alle dimensioni fisse della cella. Mi piace di più il nuovo approccio, specialmente con un editor semplicistico che riempie la maggior parte dei valori per me e mi permette di usare gli sprite come modelli per altri sprite.

Uso direttamente le informazioni alfa e di trasparenza memorizzate nelle immagini PNG, quindi non devo preoccuparmi di memorizzarle altrove, anche se altri approcci sarebbero scegliere un valore fisso per sprite e archiviarlo da qualche parte, usare il pixel più a sinistra nella posa se sai che è sempre vuoto, usa una voce di tavolozza specifica se stai usando quelle, sprite maschere o cosa hai.

Altri suggerimenti

Non si tratta di java ma in generale puoi realizzare tutti i tuoi sprite nella stessa dimensione. Pertanto, sarai in grado di generare i tuoi sprite nel tuo gioco (o app) con un semplice ciclo.

Ma per sprite di dimensioni diverse potrebbe esserci un problema per le dimensioni dello spritesheet (può essere più grande del previsto). Quindi devi definire un file xml o json per il tuo foglio di calcolo per trovare le tue immagini sprite nel tuo codice. Puoi utilizzare gli editor di fogli sprite (ce ne sono molti, sto usando Sprite Master ) per una rapida e modo semplice per generare il foglio sprite e coordinare i dati.

Rendi il tuo foglio sprite conoscendo le dimensioni e il numero di ogni sequenza.

Prendi un'immagine tamponata del tuo foglio e usa qualcosa del genere:

currentframe=spritesheet.getSubimage(x, y, w, h); 

Le tue xey cambieranno in base al frame in cui ti trovi. Mantieni la larghezza e l'altezza uguali per rendere le cose facili su te stesso.

Dimentica di provare a tenere l'intero gioco su un foglio. È pazzesco e difficile da gestire. Usa un nuovo png per ogni sequenza di animazione. Se sei ansioso di risparmiare spazio, crea solo animazioni a destra in movimento e capovolgi l'immagine in tempo reale per spostarti a sinistra.

Java leggerà i file png con l'alfa, quindi non preoccuparti del colore della trasparenza. Disegna tutto in png. Usa Photoshop o Gimp.

Cerca su Google immagini java TYPE_INT_ARGB

Bene, dal momento che la maggior parte di essi è personalizzata, questi dettagli sono a carico dell'attore. Generalmente il file inizia con le informazioni di intestazione che contengono i dettagli di altezza / larghezza e codifica, trasparenza, ecc.

Molte volte le cose si trovano in un file perché è molto costoso aprire / leggere più file rispetto ad aprire / leggere un file. Molti motori di gioco utilizzano zip o " ziplike " file con compressione 0 per trattare un singolo file come un filesystem.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top