Domanda

Io lavoro su uno sparatutto in 2D con un sacco di oggetti in movimento sullo schermo (proiettili ecc).

Io uso BitmapData.copyPixels(...) per rendere l'intero schermo per un buffer:BitmapData.Poi ho "copyPixels" da "buffer" di schermo:BitmapData.Il framerate è di 60.

private var bitmap:Bitmap = new Bitmap();
private var buffer:Bitmap = new Bitmap();

private function start():void {
    addChild(bitmap);
}

private function onEnterFrame():void {
    // render into "buffer"
    // copy "buffer" -> "bitmap"
}

Il problema è che gli sprite sono lacerando:qualche parte di uno sprite ha spostato in senso orizzontale.

Sembra un gioco per PC con VSYNC disattivato.

Qualcuno ha risolvere questo problema?

AGGIORNAMENTO: la questione non riguarda le prestazioni, ma su sbarazzarsi di lo screen tearing.

[!] AGGIORNAMENTO: Ho creato un'altra domanda e qui si può provare entrambe le implementazioni:uso di Flash modo o BitmapData+copyPixels()

È stato utile?

Soluzione

Sento il tuo dolore, come attualmente sto in trincea a sviluppare il mio gioco.A impostazioni predefinite, i Flash renderer produce orribile lo screen tearing / v-sync problemi, indipendentemente dal codice di produzione.

Questo è il motivo per cui ero contento di aver trovato il più semplice, elegante risposta, che non era il re-factoring codice (il che non aiuta un singolo bit, il problema è il Flash player, non il codice).

Basta attivare l'Accelerazione Hardware nelle opzioni di Pubblicazione.Ci sono due diverse opzioni:

Livello 1:Diretta;e Livello 2:GPU.

Leggi di più a riguardo alla documentazione ufficiale: Specificare le impostazioni di pubblicazione per i file SWF, e decidere quale opzione è meglio per il vostro gioco.

Target di mercato gioca un fattore qui, se e ' un gioco serio per i giocatori, non c'è bisogno di preoccuparsi di problemi di prestazioni, come la maggior parte dei giocatori GPU.

Questo articolo non fornire me con la soluzione in particolare, ma mi portano nella giusta direzione.MA, se il tuo gioco è intenzione di essere in una finestra del browser, è possibile utilizzare la stessa tecnica di impostazione wmode diretto o gpu così.

Altri suggerimenti

Per prima cosa si potrebbe desiderare di fare è smettere di trattare il Flash Player come è DOS. Il Flash Player è un motore di gioco 2D altamente ottimizzato così com'è e io non capisco il motivo per cui si sta cercando di reinventare la ruota copiando un sacco di fette bitmap in giro. Naturalmente avrete problemi di prestazioni.

Il Flash Player non permette di sincronizzare qualsiasi vuoto verticale o orizzontale perché il Flash Player non ha semplicemente alcun concetto di questo.

Personalmente ritengo che si dovrebbe ripensare ci si avvicina, se si desidera 'fluida' animazione. Il Flash Player è certamente capace di questo, si sta solo cercando l'approccio sbagliato.

Non salvare le cose a BitmapData, che uccide, assolutamente uccidere la vostra applicazione. Bitmap dati non è molto performante.

rendere tutti i vostri elementi di gioco in Flash, come Sprites (o MovieClip se è necessario), e poi lavorare come flash era destinato a lavorare, come una piattaforma di animazione vettoriale. Non è mai stato ottimizzato per la grafica 2D bitmap. Grafica vettoriale 2D funzionano bene, e anche se si importano immagini bitmap che lavoreranno meglio muoversi allora saranno rese a un oggetto BitmapData.

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