Post on 22-Jun-2015
description
maurizio.moriconi@mobilesoft.it - MobileSoft
Maurizio Moriconi
Cocos2d: creare videogiochi con facilità!
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Chi sono
• CTO presso Mobilesoft• Mobile Developer
• Co-founder• Main Developer
http://www.facebook.com/maurizio.moriconi
http://www.linkedin.com/in/bugman
@bugman79
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Cocos2d
• Framework per videogiochi 2D Open Source
• Nato inizialmente in Python e portato su altri linguaggi
• Versione Objective-c sviluppata da Ricardo Quesada (assunto da Zynga dal 2011)
• Basato su OpenGL ES 1.1 e 2.0
• Con più di 3500 giochi presenti nel solo Apple Store
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Cocos2d ports
• Alice (iPad)• The Elements (iPad)• Tiny Tower• StickWars• Farmville• Zombie Farm• Foldify
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Esempi di successo
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Perché usare Cocos2d
• E’ gratis (no royalties)• E’ Open Source• 2D (ma usa openGL ES!)• E’ scritto in objective-C * ma meno tecnico • Si programma!• Ci fa concentrare sul gioco e sul design
* o altri linguaggi di programmazione (Java, C++, C#, JavaScript, Python)
• Documentazione: http://www.cocos2d-iphone.org/wiki/doku.php/
• Forum: http://www.cocos2d-iphone.org/forum/
• API reference / Xcode Documentation integration
• Tanti esempi e tool esterni (CososBuilder ed altro)
• Varie pubblicazioni
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Materiale e comunità
• Scene management (workflow)• Transitions between scenes• Sprites and Sprite Sheets• Effects: Lens, Ripple, Waves, Liquid, Twirl...• Actions (behaviors): Move, Rotate, Scale, Jump...• Basic menus and buttons• Integrated physics engine: Box2d / Chipmunk• Particle systems• Text rendering support • Tile Map support: Orthogonal /Isometric / Hexagonal Map• Parallax scrolling support• Sound support• Touch/Accelerometer (iOS) • Fast Textures: Supports PVRTC textures, 8-bit textures, 16-bit textures and 32-bit textures• Ribbons• Shaders (versione 2.0)
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Cocos2d Features
http://www.cocos2d-iphone.org/download
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Download ed installazione
https://github.com/cocos2d/cocos2d-iphone/tags
Ci sono template per Xcode!!
Stable Version: 2.0 / 1.0.1Unstable Version: 2.1-rc / 1.1
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Hello World
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Hello World
Librerie cocos2d
Icone e SplashScreen
Application Delegate
Intro Scene
HelloWorld Scene
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Hello World
Splashscreen
Intro Scene
Hello World Scene Game Center già configurato!!!
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Show me the code...
Director inizializza OpenGL ES e gestisce le scene
Scenes pensiamole come una schermata di gioco
Layers compongono le scene (vedi Photoshop)
Spites vi dice qualcosa questa parola?? 8-)
Nodessono l’oggetto base di cocos2d
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Basic Concepts
CCScene
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Scenes
Fonte immagine cocos2d Wiki
• Sono composte da uno o più layer • E’ una sottoclasse di CCNode• E’ possibile avere delle transizioni CCTransitionScene
CCLayer
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Layers
Fonte immagine cocos2d Wiki
• Gestisce gli eventi di touches e l’accellerometro• E’ una sottoclasse di CCNode• Può essere semitrasparente• Contengono gli Sprites
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Nodes
CCNode
• E’ la classe base da cui derivano le altre• Tutto quello che è disegnato è un NODO!• Possono contenere altri nodi• Eseguono Actions • Alcune proprietà
• Position• Z order• Tag• ...
Sperando che vi ricordate cosa sia un sistema di riferimento cartesiano
0,0# X#
Y#
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Sprite
Creazione
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Sprites
CCSprite* ryu = [CCSprite spriteWithFile:@"0.png"];
ryu.position = ccp( x , y );
Posizionamento (di base è 0,0)
Anchor Pointdi base è 0.5,0.5
[self addChild:ryu z:1 tag:123];
Aggiunta al LayerSprite posizionato a 0,0
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Actions
CCActions• Sono gli “ordini” che possiamo dare ai nodi!
• Possono essere: istantanee o periodiche
• Si auto-rimuovono una volta terminate
• Si definiscono con un tempo, i movimenti o altre azioni sono interpolate e gestiti in automatico!!!
es. spostati fino a x,y in 2 secondi!!!
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Actions
Basic Move, Scale, Rotate, Bezier, Hide, Fade,Tint..
Composition Sequence, Repeat, Spawn, RepeatForever..
Ease Ease, EaseExponential, EaseBounce..
Effects Lens, Liquid, Ripple, Shaky,Twirl,Waves..
Special CallFunc, Follow..
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Actions in action!
CCScaleTo *scaleToAction = [CCScaleTo actionWithDuration:duration scale:scale];
CCRotateBy *rotateByAction = [CCRotateBy actionWithDuration:duration angle:angle];
CCSequence *sequence = [CCSequence actions:scaleToAction, rotateByAction, nil];
[ryu runAction:sequence];
CCMoveTo *moveToAction = [CCMoveTo actionWithDuration:duration position:newPosition];[ryu runAction:moveToAction];
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Show me the code...
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Sprite Sheets
Super Mario All-Stars: Super Mario Bros. 2
Texture con dimensioni di potenze di 2
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Texture Atlas
2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048
Texture 256x256
Wasted memory
1. Chiamate ad OpenGLES ridotte2. Utilizzo della memoria ottimizzato3. Si possono gestire sprite con diverse dimensioni4. Ci sono tool ottimi come Texture Packer (o Zwoptex) per crearle
Perchè usarle ???
http://www.codeandweb.com/texturepacker
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Texture Packer
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Gestire i controlli
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
• Ogni layer può ricevere comandi (touch, mouse, tastiera)
• Facile da implementare!!!• Implementazioni di Joypad OpenSource
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Show me the code...
Scelta tra 2 motori Fisici:• Box2D• ChipMunk
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Physics engine
Con un motore fisico si delega la gestione delle animazioni mappando Sprite con oggetti della fisica
Caratteristiche:• scritto in C++ • sviluppato da Erin Catto (Blizzard Entertainment)• openSource e multipiattaforma
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Box2d
http://box2d.org
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
ChipMunk
Caratteristiche:• scritto in C • sviluppato da Scott Lembcke (Howling Moon Software)
• openSource e multipiattaforma• esistono versioni a pagamento
http://chipmunk-physics.net
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Cocos2d Templates
CocosDenshion
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Sound Engine
• Libreria audio iOS e Mac OS X
• Si può usare al di fuori di Cocos2d!!
• Alto e basso livello
• Supporta molti formati tra cui:
• Caf• Aiff• Wav• Mp3
Play a sound
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
SimpleAudioEngine
[[SimpleAudioEngine sharedEngine] playEffect:@"mysound.wav"];
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"mario-music.mp3"];
Play a music
[[SimpleAudioEngine sharedEngine] preloadEffect:@"mysound.wav"];
Preload a sound
Preload a music[[SimpleAudioEngine sharedEngine] preloadBackgroundMusic:@"mario-music.mp3"];
CDAudioManagermaurizio.moriconi@mobilesoft.itMaurizio Moriconi
CDAudioManager e CDSoundEngine
CDSoundEngine
• E’ usata anche da SimpleAudioEngine
• Permette di gestire più tracce di lunga durata
• Utile se serve suonare più suoni contemporaneamente
• Sound Engine basato su OpenAL
• Gestisce fino a 32 suoni contemporanei
• Permette effetti come:• Pitch• Pan• Gain
Il tempo è tiranno...
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Alcune features
Vediamo alcune features al volo...
CCMenu
composto da Menu Item
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Menu
Sistema particellare, alcuni effetti:• fuoco• pioggia• neve• galassia• molti altri....
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Particle system
CCParticleFire *fire = [[CCParticleFire alloc] initWithTotalParticles:100];[fire setLife:20];[fire setAutoRemoveOnFinish:YES];fire.position = ccp(size.width/4,size.height/2);[self addChild:fire];
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Tile maps
Basate sul concetto di Tile• riuso della grafica • possibilità di assegnare status a dei tile• editor esterni per creare “mondi”
Ortogonali
Isometriche
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Altre ancora...
Parallax Scrolling
Ribbons
Shaders
BitMapped Font
Cocos Builder
Game Center
Cocos2d è uno dei tanti mezzi...
il resto ce lo mettete voi...
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Cocos2d
Donald Knuth “The Art of Computer Programming”
maurizio.moriconi@mobilesoft.itMaurizio Moriconi
Programmare è un arte!
Our discussion indicates that computer programming is by now both a science and an art, and that the two aspects nicely complement each other. [...] We have seen that computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Therefore we can be glad that people who lecture at computer conferences speak about the state of the Art.