FAQ: cocos2d for iPhone: What makes SpriteSheets faster than regular Sprites? Comments Feed" href="http://www.learn-cocos2d.com/knowledge-base/cocos2d-iphone-faq/feed/"/>

FAQ: cocos2d per iPhone: Che fa SpriteSheets più velocemente che Folletti regolari?

What makes SpriteSheets faster than regular Sprites?

Cerchi il mio cocos2d d'iPhone FAQs & Tutorials

Per favore annoti che la ricerca di blog nell'angolo giusto superiore non cerca il mio FAQs e Seminari universitari sotto la guida di un tutor.
 

  • Annoti: per favore non condivida collegamenti di trasferimento di dati diretti con file PDF, i collegamenti di trasferimento di dati finiscono dopo di dei minuti di coppia!

In grafica programmando la traduzione di strutture avviene telefonate di tiro così dette. Ciascuno tira serie di telefonata i nuovi stati nel motore di traduzione, che causa alcuni in alto siccome i parametri sono cambiati e le strutture scambiate in o di memoria video. In generale Lei vuole siccome poco tirano telefonate per quanto possibile. In general you want as few draw calls as possible.

Adesso se Lei vuole renderne la stessa struttura o le parti diverse volte Lei può fare questo in uno tira la telefonata. Sull'iPhone la riduzione tira telefonate è uno dei fattori importanti ad acquisizione di framerate alto. Mentre ogni Folletto è reso seperately, ciascuno nella sua telefonata di tiro, con SpriteSheets Lei può rendere tutto di struttura dello SpriteSheet in soltanto uno tira la telefonata. Di solito SpriteSheet avrà un Atlante di Struttura come struttura, allora Lei può rendere animazioni di giocatore, le animazioni di mostro e la grafica di livello da stesso SpriteSheet con soltanto uno tira la telefonata. While each Sprite is rendered seperately, each in its own draw call, with SpriteSheets you can render everything of the SpriteSheet's texture in just one draw call. Usually the SpriteSheet will have a Texture Atlas as texture, so you can render player animations, monster animations and level graphics from the same SpriteSheet with just one draw call.

Se Lei riceve 60 fps nel Suo gioco senza SpriteSheets, non si preoccupi di loro. Ma se Lei vuole fare un gioco con molti Folletti, diciamo più di 50 folletti con 64x64 i Pixel allora Lei deve usare un Atlante di Struttura e SpriteSheet dall'inizio.

Lezione di trasferimento di dati PDF

Commenti (0)

11 Risposte a “FAQ: cocos2d per iPhone: Che fa SpriteSheets più velocemente che Folletti regolari?

What makes SpriteSheets faster than regular Sprites?
  1. Max dice:

    Schiarimento di posto. Grazie!

    E, certamente, ho alcuni la domanda :)

    - tutto è relativo, ma per codice comune è migliore per usare NSString, NSArray (e pagare il costo di creare nuovi oggetti) o i mutabili? Quale può essere i parametri per scegliere tra ognuno?

    - Mi sto chiedendo se il nuovo iPhone 4.0′s il più grande svolgimento sarà un problema. I giochi che dirigono pianamente in iPhone 1i e 2i dispositivi di generazione probabilmente funzioneranno troppo velocemente?

    • GamingHorror dice:

      Ciao Max,

      dubito che i NSMutable* datasets siano sicari di svolgimento. Non ho fatto nessuna prova ma sono piuttosto sicuro che se Lei non li cambia affatto loro probabilmente si comporteranno così buono come i nonmutabili. Adesso, una volta Lei *do* ha bisogno di cambiare gli assortimenti o gli spaghi è buono averli mutabile in modo che la roba sia avuta cura per Lei dietro le quinte. D'altra parte, se Lei sa che Lei starà solo creando gli articoli una volta, ma riordinare mai, togliere o aggiungere che gli altri allora usano i nonmutabili. Per me è una questione di caso d'uso, piuttosto che svolgimento. Now, once you *do* need to change the arrays or strings it’s good to have them mutable so that stuff is taken care for you behind the scenes. On the other hand, if you know that you’ll only be creating the items once but never re-order, remove or add others then use the non-mutable ones. For me it’s a matter of use case rather than performance.

      I giochi non funzioneranno più velocemente su più nuovi dispositivi. il cocos2d's CCDirector si assicura di questo. Lei migliora framerates certamente, ma non più velocemente gameplay. Questo tiene true per tutti i motori di gioco moderni. You do get better framerates of course but not faster gameplay. That holds true for all modern game engines.

  2. Sean dice:

    Ciao gaminghorror. Grazie per tutta la gran informazione sul Suo blog:) che Veramente trova questo utile.

    Volli chiedere sul Suo codice di sfondo di parallasse sopra – sto usando questo in un progetto di prova, ma non posso sembrare di fare la copertura di tegole adattarsi perfettamente vicino a eachother. In altre parole, il mio folletto che sto rivestendo di tegole (che è 480, 320 in dimensioni) sta rivestendo di tegole, ma quando il nuovo folletto comincia, c'è uno spazio vuoto nero circa 25 pixel larghi tra il nuovo e il vecchio. È là qualche strada a elliminate questo spazio vuoto? Ho provato a cercare i fori cocos2d eccetera, e ho trovato l'informazione su 2a proiezione che spegne eccetera … ma niente di quello mi ha aiutato finora … A provare e illustrare quello che sto ricevendo, questo è quello che divento avvolgente in volute attraverso lo schermo di dispositivo (lo x's sono il folletto lo spazio bianco è lo spazio vuoto nero che ricevo): Is there any way to elliminate this gap? I have tried searching the cocos2d forums etc, and found info on 2D projection turning off etc… but none of that has helped me so far… To try and illustrate what I am getting, this is what I get scrolling across the device screen (x’s are the sprite white space is the black gap I get):

    lo xxxxxxxxxxxxxxx | |xxxxxxxxxxxxxxxx | |xxxxxxxxxxxxxxxxxx | |xxxxxxx

    • GamingHorror dice:

      Questo sembra di essere un compenso di collocamento, è sicuro Lei che i folletti sono esattamente 480 pixel separatamente ciascuno? Entrambi anche hanno bisogno di avere stesso anchorPoint. E se Lei cambia la scala dei folletti, il compenso anche ha bisogno di esser aggiustato in modo adatto. And if you change the scale of the sprites, the offset also needs to be adjusted appropriately.
      Lei potrebbe volere mettere alla prova il collocamento con più piccoli folletti in modo che almeno due di loro si adattino completamente sullo schermo.

      • Sean dice:

        Ciao GamingHorror, grazie infinite per la risposta:) Così questa mattina mi svegliai ed ebbi una mente chiara – pensò a questo per mentre - Il mio folletto per lo sfondo è esattamente 480×320 – cioè screensize. Lo spazio vuoto vedevo il genere di 20-30 pixel dati un'occhiata tra ogni folletto ripetuto. Allora pensai, ehi, a 480, soltanto mi danno una struttura che è 512 in diritto di dimensioni? Così forse il suo fare di un pieno 512pixel la struttura. Allora ritornai per fotofare acquisti, e aumentai la mia larghezza di folletto a 512 (come me wouldnt perdono qualsiasi svolgimento comunque) e diede questo un tentativo, usando il Suo codice: So I thought, hey, at 480, I am just being given a texture that is 512 in size right? So maybe its doing a full 512pixel texture. So I went back to photoshop, and increased my sprite width to 512 (as I wouldnt lose any performance anyway) and gave this a try, using your code:

        Il CCSprite *background = [CCSprite spriteWithFile:@ "tile1.png"
        il rect:CGRectMake (0,0, 480*50, 320)];
        [stesso addChild:background];
        [lo sfondo setPosition:ccp (winSize.width/2, winSize.height/2)];
        il ccTexParams params = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
        [background.texture setTexParameters: ¶ms];

        e questo lo classificò! Nessuno più spazi vuoti. Grazie infinite per le lancette anche – non avevo pensato ad anchorPoints! Ancora grazie per gran blog. Sono sottoscritto! Thanks so much for the pointers too – I hadn’t thought about anchorPoints! Thanks again for the great blog. I am subscribed!

        • GamingHorror dice:

          Ah sì, se Lei sta usando GL_REPEAT allora le dimensioni d'immagine devono essere un potere di due. Eg 64×64 o 512×128

          • Sean dice:

            Terrificante – che pulisce cose per me e ha il senso perfetto adesso. Grazie per conferma. La mia parallasse layered avvolgente in volute sta sembrando dolce adesso! My layered parallax scrolling is looking sweet now!

  3. Sean dice:

    Così altra domanda veloce … indovino che non sarà possibile usare uno spritesheet con GL_REPEAT? Particolarmente la strada Lei ha bisogno di creare un CGRect

    Attualmente faccio altra grafica da spritesheets come questo:

    Il CCSprite *projectile = [CCSprite spriteWithSpriteFrameName:@ "missile.png"];

    Che sono caricati dal mio.plist / spritesheet. Non possibile assegnare allo sfondo GL_REPEAT come questo?

    • Poiché GL_REPEAT è un parametro di struttura, si rivolge alla struttura intera, allora Lei avrà bisogno di usare una struttura d'immagine sola, e le dimensioni devono essere un potere di 2, eg 128×16 o 256×256.

      Questo anche esclude l'uso di spritesheet.

  4. Mattis dice:

    Usando questa tecnica questo lavora bene nel simulatore, ma sul dispositivo la struttura è super-blocky e pixellated. Sto dirigendo questa prova su cocos2d 0.99.5.

    Ive provò sia con 256×256 sia con 512×512 le strutture, e il risultato è lo stesso. Il simulatore si ripete perfettamente, i tratti di dispositivo e pixellates la struttura in modo orrendo.

    Ha Lei qualche idea perché questo avviene?

Lasci una Risposta