Prova di Svolgimento di gruppo del Folletto di Cocos2D

Il 8 settembre 2011, in cocos2d, idevblogaday, Kobold2D, da Steffen Itterheim in cocos2d, idevblogaday, Kobold2D, by Steffen Itterheim

Mentre scrittura dell'Imparare di Cocos2D prenota fui sorpreso per trovare che Cocos2D’s CCSpriteBatchNode fu solo capace di aumentare lo svolgimento di parecchie centinaia di folletti di pallottola su schermo di circa il 10-15 % (20 a 22.5 fps). Volli rivisitare quello scenario per molto tempo perché per quanto capii, più folletti tiravo il più grande che l'effetto di CCSpriteBatchNode deve essere.

Ma perfino Cocos2D’s le proprie prove di svolgimento di folletto (confrontano colonne 9 e 10) rivelò una differenza di svolgimento del meno di 20 % (39 a 42 fps). È solo quando tutti i folletti sono scalati e fatti girare, o la maggior parte di loro sono fuori dell'area di schermo, quel folletto batching sembra di avere un effetto più grande (25 a 60 fps). Certamente quello scenario non è applicabile a la maggior parte giochi. Allora iniziai a investigare. Surely that scenario is not applicable to most games. So I started investigating.

Punta: se Lei sta cercando un seminario universitario sotto la guida di un tutor che Le mostra come azionare con Folletto Batching così come Atlanti di Struttura e Imballatore di Struttura, Lei può leggerlo nel mio Imparare il libro di Cocos2D o in questo seminario universitario sotto la guida di un tutor d'ottimizzazione di Folletto da Ray Wenderlich.

Il fallimento di Comprendere

Il mio primo tentativo ricreò lo scenario che ebbi prima: un folletto solo ha inizializzato con spriteFromFile e disegno dozzine e le centinaia di loro su schermo, poi confrontando lo svolgimento con e senza CCSpriteBatchNode. Il risultato confermò la mia scoperta iniziale che un aumento del 15 % è il miglioramento assoluto migliore che Lei può vedere in questo scenario. Fui ancora più deluso questa volta perché le mie immagini individuali sono file PNG regolari mentre il mio atlante di struttura è una struttura PVR compressa. The result confirmed my initial finding that a 15% gain is the absolute best improvement you can see in this scenario. I was even more disappointed this time because my individual images are regular PNG files while my texture atlas is a compressed PVR texture.

Mi chiesi, forse non c'è semplicemente nessun avvenimento di cambiamento di stato di OpenGL? Dopotutto, sto soltanto rendendo molti folletti usando la stessa struttura, e quella struttura può rimanere legata allo stato di OpenGL dal folletto precedente perfino senza folletto batching. La soluzione semplice di fare sondaggi alla ricerca quello che doveva alternare il disegno tra due immagini di folletto diverse: The simple solution to test that was to alternate drawing between two different sprite images:


Sopra: le immagini PNG individuali, nessun folletto batching. Sotto: il folletto batching da atlante di struttura PVR. 160 Folletti in ogni prova. 2 immagini diverse, 256×71 e 128×64. Misurato su iPhone 3G. Below: sprite batching from PVR texture atlas. 160 Sprites in each test. 2 different images, 256×71 and 128×64. Measured on iPhone 3G.

Detto e fatto, un cambiamento abbastanza semplice che garantisce un appello di tiro separato di ogni folletto perché la struttura deve esser sostituita per ogni folletto che è tirato. Ahimè, la differenza di svolgimento tra batching e non batching i folletti rimase lo stesso (il significato: quasi trascurabile). Raddoppio e triplo controllò il mio codice di prova, ma fu corretto. almost negligible). I double and triple checked my test code, but it was correct.

Com'è una Telefonata di Tiro e che lo fa caro?

Nella mia confusione girai per Cinguettare. Grazie a @MattRix e @GeekAndDad cominciai a capire che questo sia la più grande varietà di folletto sia le dimensioni di struttura di un folletto individuale deve avere un gran effetto su svolgimento di folletto.

In altre parole, importa moltissimo quanto un folletto differisce dal precedente e quale OpenGL dichiara che questo cambia, quale anche spiega l'effetto drammatico di folletto batching quando i folletti sono scalati o fatti girare. Mi scopro che se Lei continua a rendere gli stessi folletti o molto simili allo stesso modo, il folletto batching veramente non aiuta così molto.

Ritornai alla mia prova e iniziai a usare folletti più grandi (480×320 con molta trasparenza) e immediatamente vidi una differenza più grande tra folletto batching e nessun folletto batching. Con solo 10 tali folletti grandi su schermo ricevevo 15 fps sul mio iPhone 3G. Appena permisi il folletto batching il framerate salì a 60 fps. Questo è abbastanza la differenza: Once I enabled sprite batching the framerate went up to 60 fps. That’s quite the difference:


Sopra: le immagini PNG individuali, nessun folletto batching. Sotto: il folletto batching da atlante di struttura PVR. 10 Folletti in ogni prova. 6 immagini diverse, 480×320 ciascuno. Misurato su iPhone 3G. Below: sprite batching from PVR texture atlas. 10 Sprites in each test. 6 different images, 480×320 each. Measured on iPhone 3G.

Con 20 folletti il folletto batching lo svolgimento fu ancora circa 34 fps rispetto a 7 fps senza folletto batching. Questo significa che per qualcuno chi sta componendo le loro immagini di sfondo d'immagini multiple (eg per parallasse avvolgente in volute), il folletto batching può fare una differenza enorme anche se Lei solo ha 3 o 4 immagini diverse di sfondo.

Le stesse scoperte si rivolgono al Mac, perfino più così in effetti come Lei può vedere da questo confronto usando le strutture grandi:


Lasciato: le immagini PNG individuali, nessun folletto batching. Diritto: il folletto batching da atlante di struttura PVR. 2146 Folletti in ogni prova. 6 immagini diverse, 480×320 ciascuno. Misurato su iMac (3.06 2 Duo Principale GHz, ATI Radeon HD 4850 512 MEGABYTE). Right: sprite batching from PVR texture atlas. 2146 Sprites in each test. 6 different images, 480×320 each. Measured on iMac (3.06 GHz Core 2 Duo, ATI Radeon HD 4850 512 MB).

Anche ridiedi la prova con una serie diversa di folletti. Questa volta non usavo alcuna delle strutture grandi:


Lasciato: le immagini PNG individuali, nessun folletto batching. Diritto: il folletto batching da atlante di struttura PVR. 2146 Folletti in ogni prova. 12 immagini diverse, le più piccole 67×32, più grande 150×79. Misurato su iMac (3.06 2 Duo Principale GHz, ATI Radeon HD 4850 512 MEGABYTE). Right: sprite batching from PVR texture atlas. 2146 Sprites in each test. 12 different images, smallest 67×32, largest 150×79. Measured on iMac (3.06 GHz Core 2 Duo, ATI Radeon HD 4850 512 MB).

Lo e guarda, se tutto che Lei fece doveva dirigere questa seconda prova Lei poteva facilmente venire a conclusione che il folletto batching non ha nessun effetto o solo inizia ad avere un effetto significativo secondo circostanze relativamente illusorie. Pensi che in questo Mac fanno sondaggi alla ricerca dovevo rendere 16.000 folletti prima che la prova di non-batched scese a 20 fps mentre la prova di folletto-batched rimase a 60 fps.

Punta di Pro per utenti iMac: la prova di Mac Diretta, con 20.000 + i folletti. La prova di congedo funzionando durante 20 minuti. Giri l'appartamento iMac, lo schermo sopraffacente. Usi l'uovo con iMac. Nom, nom, nom. Leave test running for 20 minutes. Turn iMac flat, screen facing down. Use egg with iMac. Nom, nom, nom.

La Conclusione

Se Lei, come me, fu sotto l'idea sbagliata che il folletto batching particolarmente aiuta rendendo molti degli stessi folletti o simili, allora forse Lei stava sprecando lo svolgimento? In effetti, sono le immagini più grandi che Lei vorrà tirare tutti dallo stesso atlante di struttura per migliorare il folletto batching lo svolgimento. Lo scenario ideale essere che tutti i beni della scena intera si accordano soltanto con un atlante di struttura. The ideal scenario being that all assets of the entire scene fit into just one texture atlas.

Può perfino essere benefico per lo svolgimento di giochi situati nel livello, in cui ogni livello solo usa un sottoinsieme delle immagini, per creare atlanti di struttura separati per ogni livello se questo Le permette di ricevere beni di ogni livello in soltanto un atlante di struttura. Anche se questo intende duplicare alcuni beni come il carattere di giocatore e la grafica HUD. Niente batte la traduzione di tutto dallo stesso atlante di struttura! Nothing beats rendering everything from the same texture atlas!

Il più certamente Lei non deve usare atlanti di struttura separati per ogni categoria d'immagine. Ho visto questo in progetti di alcun progettista dove loro usarono atlanti di struttura relativamente piccoli (128×128 ad al massimo 512×512), ciascuno di cui solo contenne le immagini per il carattere di giocatore, per un tipo di nemico, per il HUD, per gli elementi di sfondo, e così via.

TIY: Lo provi Lei stesso Con Kobold2D

La suddetta prova è il progetto di sagoma di svolgimento del Folletto d'Anteprima Kobold2D 3. Kobold2D deve con questo per la prima volta e d'ora innanzi essere pubblicamente disponibile per trasferimento di dati. Grazie a tutti i tester! Thanks to all testers!

Lei può facilmente adattare la prova di svolgimento del Folletto per usare i Suoi beni, e il suo configurabile modificando le installazioni nel file config.lua. Ogni prova espone un numero specifico di folletti a caso su schermo, prima senza folletto batching, poi con folletto batching.

Ogni folletto è assicurato di essere completamente su schermo, se sono dimensioni non eccedono le dimensioni di schermo. Il seme casuale è azzerato per ogni corsa per garantire che esattamente stessi folletti sono usati e messi a esattamente stessa posizione per fare le prove comparabili. E certamente le corse di prova sia su dispositivi & iOS sia su Mac, con Simulatore avere gli invalidi d'esposizione di FPS da svolgimento di Simulatore sono completamente senza senso e non devono esser misurate o confrontate. And of course the test runs on both iOS devices and Mac, with Simulator having the FPS display disabled since Simulator performance is entirely meaningless and should not be measured or compared.

La Lista Completa (?) D'attrezzi Cocos2D

Il 24 giugno 2011, in libro, cocos2d, gli attrezzi, da Steffen Itterheim in book, cocos2d, tools, by Steffen Itterheim

Per la seconda edizione dell'Imparare di Cocos2D prenotano compilai una lista alfabeticamente classificata d'attrezzi che i progettisti possono usare per progetti di cocos2d. Per favore fatemi sapere se c'è un attrezzo essendo assente da questa lista o se c'è quel che che non lavorerà più e non è stato aggiornato in mesi.

Gli attrezzi seguenti possono esser usati per sviluppo con cocos2d:

Attrezzi di Serie completa di caratteri di Bitmap

BMFont (Windows)
Fonteditor
Stilista di Glyph
Hiero
LabelAtlasCreator

Attrezzi di Redazione di Particella

ParticleCreator
Stilista di Particella

Attrezzi di Redazione di Fisica

Mekanimo
PhysicsBench
PhysicsEditor
VertexHelper

Attrezzi di Redazione di Scena

CocosBuilder
Cocoshop
LevelHelper

Attrezzi d'Atlante di Struttura

Redattore di DarkFunction
SpriteHelper
TexturePacker
Zwoptex

Tilemap Redazione d'Attrezzi

iTileMaps
Redattore di Carta geografica A piastrelle

Aggiornamento di Libro di Cocos2D: Rendiconto dei lavori

Il 29 maggio 2011, in libro, cocos2d, da Steffen Itterheim in book, cocos2d, by Steffen Itterheim

Questo sta venendo grande!

Completai le revisioni sul Capitolo 1 a 5. Il codice sorgente intero è adesso aggiornato per usare cocos2d-iphone v1.0.0 rc2. Fare il codice futuro aggiorna più facile anche scrissi un copione che mi permette di copiare una più nuova versione cocos2d a tutti i progetti, che essenzialmente fa Passi 1 & 2 descritto nell'Aggiornamento Cocos2D in un seminario universitario sotto la guida di un tutor Esistente Di progetti. To make future code updates easier I also wrote a script that allows me to copy a newer cocos2d version to all projects, which essentially does Steps 1 & 2 described in the Updating Cocos2D in an Existing Project tutorial.

La maggior parte di Cambiamenti Notabili

Il capitolo 4 adesso include una descrizione di Stilista Glyph per fare Serie complete di caratteri Bitmap, e solo menziona Hiero sulla parte. Lo Stilista di Glyph è l'attrezzo migliore passa.

Il capitolo 5 ha visto una revisione del paragrafo che spiega la subclassificazione da NSObject. Penso che andai il corso troppo lontano qui e subclassificando da CCNode farà molte cose più facili ancora dando gli stessi vantaggi riguardo a composizione di classe.

Nel Capitolo 6 decisi di sostituire tutte le descrizioni di Zwoptex con TexturePacker come l'attrezzo preferito per fare atlanti di struttura.

Per un po' questo assomigliò a Zwoptex e TexturePacker starebbe competendo allo stesso livello. Ma recentemente Andreas Löw (TexturePacker & PhysicsEditor) fece il movimento per azionare il tempo pieno sui suoi attrezzi, mentre Robert Payne è occupato con un lavoro a tempo pieno. Penso che le prospettive stanno cercando molto meglio TexturePacker adesso, e è già principale in termini di frequenza d'aggiornamento e caratteristiche. I think the prospects are looking much better for TexturePacker now, and it is already leading in terms of features and update frequency.

D'accordo per adesso.

CCSprite utile cifra la gemma …

Il 14 gennaio 2011, in cocos2d, Programmazione, da Steffen Itterheim in cocos2d, Programming, by Steffen Itterheim

Spesso parto con nuovo codice usando la grafica finta. Finché io riesca a capire di che esattamente ho bisogno e quello che sta per lavorare, lavoro con file d'immagine soli aggiunti a risorse del progetto. Creazione di un atlante di struttura è sempre il passo ultimo che faccio, appena tutto è sistemato. Creazione e aggiornamento di un Atlante di Struttura aggiungono soltanto alcuni passi supplementari ma sempre mi sforzo di evitare qualsiasi passo supplementare superfluo durante un periodo feriale creativo. Particolarmente facendo esperimenti. Qualsiasi compito ripetitivo ostacola la creatività. Creating a texture atlas is always the last step I do, once everything is settled. Creating and updating a Texture Atlas adds just a few extra steps but I always strive to avoid any unnecessary extra steps during a creative working period. Especially while experimenting. Any repetitive task hampers creativity.

Ma alla fine, io dovrò entrare e cambiare ogni codice d'inizializzazione CCSprite da spriteWithFile a spriteWithSpriteFrameName. Eccetto, non faccio.

Seguendo è una categoria di prolungamento semplice per CCSprite che estende CCSprite con uno spriteWithSpriteFrameNameOrFile initializer. Questo cerca il nome di file dato nel CCSpriteFrameCache. Se questo esiste come CCSpriteFrame, questo usa quella struttura di folletto e altrimenti questo ritorna indietro a carico del folletto da file. Molto facile, molto utile. If it exists as CCSpriteFrame, it uses that sprite frame and otherwise it reverts back to loading the sprite from file. Very easy, very helpful.

//CCSpriteExtensions.h

#import "cocos2d.h"

@interface CCSprite (Xtensions)
+ (id) spriteWithSpriteFrameNameOrFile: (NSString *) nameOrFile;
@end
//CCSpriteExtensions.m
#import "CCSpriteExtensions.h"

@implementation CCSprite (Xtensions)
+ (id) spriteWithSpriteFrameNameOrFile: (NSString *) nameOrFile
{
  Il CCSpriteFrame* spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:nameOrFile];
  se (spriteFrame)
  {
    ritorni [CCSprite spriteWithSpriteFrame:spriteFrame];
  }
  
  ritorni [CCSprite spriteWithFile:nameOrFile];
}
@end

Andreas Löw ha rilasciato la versione (v2.1) aggiornata del suo attrezzo di creazione d'Atlante di Struttura chiamato l'Imballatore di Struttura (Pro). La versione Pro (17,95$) Le fornisce un'interfaccia di GUI, la versione non-Pro (9,95$) è un attrezzo di linea di comando. Quest'ultimo veramente corre dietro le quinte nella versione GUI. The latter actually runs behind the scenes in the GUI version.

Qui è la lista di cambiamenti introdotti in Imballatore di Struttura v2.1:

La versione libera è adesso accresciuta in modo che Lei possa creare strutture fino a 2048×2048 i pixel senza pagare un centesimo solo!

Il pretelespettatore PVR/PVR.CCZ libero Le permette di vedere le immagini – soltanto doubleclick loro in cercatore! Compreso anteprima per PVRTC.

Altre caratteristiche:

  • *.pvr e pretelespettatore *.pvr.ccz! (libero per tutti)
  • AutoSD permette automaticamente la creazione d'immagini di risoluzione standard da immagini highres (-auto-sd) (pro/cli)
  • Tratti file *.tps da linea di comando (pro)
  • I folletti di Drag'n'drop ad albero vedono per aggiungerli
  • Compressione di PVRTC2/PVRTC4
  • Qualità di riduzione a colori aumentata (pro/cli)
  • Algoritmo eccitante supplementare (Atkinson)
  • Quantization lineare
  • Quantization confinante più vicino
  • Premoltiplichi l'alfa (pro/cli)
  • La scelta di mutilare la creazione di pseudonimo automatizzata
  • Scelga l'euristica per algoritmo MaxRects (pro/cli)
  • La creazione di non il potere di 2 strutture

L'aggiornamento è l'autoaggiornamento d'utilizzazione disponibile o il trasferimento di dati da: http://texturepacker.com/download/

Legga più sulle caratteristiche d'Imballatore di Struttura, legga il manuale d'Imballatore di Struttura (PDF) o vada direttamente al negozio (Share*it!).

Aggiunga il Suo collegamento con il Cocos2D Linkvent il Calendario

Ha Lei qualcosa per condividere con la comunità Cocos2D? Non ho ricevuto sufficienti sottomissioni per riempire tutti i giorni fino a Natale, sebbene io proprio abbia sufficienti collegamenti per annunciare quel che ciascuno giorno, annuncerei un collegamento con il Suo sito web o posto di blog.

La pagina 1 di 21