Cocos2d: creare videogiochi con facilità!

Post on 22-Jun-2015

711 views 1 download

description

Cocos2d è un framework opensource per lo sviluppo di videogiochi 2d, integra al suo interno: - animazioni, transizioni, gestione menù - gestione di sprite, textureAtlas, Tile - due motori fisici (Box2D and Chipmunk) - un sound engine - un sistema particellare Noto principalmente su iPhone (con 2500+ giochi sullo Store) è ormai presente su linguaggi e piattaforme differenti (C++, C#, java e Javascript, HTML5). Il talk presenterà tutte le principali componenti presenti su cocos2d condendo il tutto con qualche esempio pratico su piattaforma iOS.

Transcript of Cocos2d: creare videogiochi con facilità!

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.