SlideShare une entreprise Scribd logo
1  sur  66
DO ZERO AO JOGO
MULTIPLATAFORMA
COM
COCOS 2D
Vitor Mattos
Bacharelando em Ciência da
Computação pela UERJ, trabalha
como instrutor e desenvolvedor na
Caelum, desenvolvendo sistemas
com Ruby e Java. Atualmente
trabalha com desenvolvimento front-
end, com foco em web mobile.
@vmattos19
vmattos
vitor.mattos@caelum.com.br
Multiplataforma?
Como funciona?
Cocos2d-x, Cocos2d-iphone,
Cocos2d-html5, ShinyCocos...
Cocos2d-x, Cocos2d-iphone,
Cocos2d-html5, ShinyCocos...
Javascript Bindings
(Mozilla Spidermonkey)
Sprites, animações, física, GUI,
audio, etc...
Começando um projeto
Ctrl + C
Ctrl + V
// Boilerplate code
var c = {
COCOS2D_DEBUG:2,
Box2d: false,
Chipmunk: false,
ShowFPS: true,
LoadExtension: false,
FrameRate: 60,
RenderMode: 0,
Tag: 'gameCanvas',
EngineDir: '../cocos2d/',
AppFiles: [
'src/resource.js',
'src/myApp.js'
]
};
// Mais boilerplate code
cocos2d.js
AppFiles: [
'src/resource.js',
'src/myApp.js',
'src/BackgroundLayer.js',
'src/GameLayer.js',
'src/GameScene.js'
]
Cena
Cena
var GameScene = cc.Scene.extend({
onEnter: function () {
this._super();
}
});
Background?
Papai Smurf?
Barrinha de vida, munição, etc?
Layers
Layers
Coins: 19Background
Game
HUD
Layers
Background
Game
HUD
Cena
Layers
var BackgroundLayer = cc.Layer.extend({
ctor: function () {
this._super();
this.init();
},
init: function () {
// Código do layer
}
});
E as imagens??
Sprites
papa-smurf.png box.png
Sprites
var s_PapaSmurf = "papa-smurf.png";
var s_Background = "background.png";
var s_HUD = "HUD.png";
var s_Box = "box.png";
var g_resources = [
s_PapaSmurf,
s_Background,
s_HUD,
s_Box
];
resource.js
Sprites
var background = cc.Sprite.create(s_Background);
this.addChild(background);
BackgroundLayer.init
var director = cc.Director.getInstance();
var winSize = director.getWinSize();
background.setPosition(winSize.width / 2,
winSize.height / 2);
Como adicionar os Layers
em uma cena?
GameScene.js
var GameScene = cc.Scene.extend({
onEnter: function () {
this._super();
}
});
this.addChild(new BackgroundLayer());
this.addChild(new GameLayer());
this.addChild(new HudLayer());
Como exibir textos?
Textos
var label = cc.LabelTTF
.create("Coins: 19", "Arial", 32);
label.setColor(cc.c3b(255,255,255));
label.setPosition(740, 410);
this.addChild(label);
RGB
HudLayer.js
Textos
Qual é a ordem
mesmo?
Sprites
Scenes
Personagens,
Inimigos,
Obstáculos,
etc
Fases,
Menus,
Tela de Game Over,
etc
Layers
Background,
HUD,
Área jogável,
etc
Que tal um pouco de
animação?
Spritesheet
papa-smurf1.png
papa-smurf2.png
papa-smurf3.png
papa-smurf4.png
papa-smurf.png
TexturePacker
TexturePacker
papa-smurf.plist
papa-smurf.png
TexturePacker
Carregando o spritesheet
var cache = cc.SpriteFrameCache.getInstance();
cache.addSpriteFrames(s_Papasmurfplist, s_PapaSmurf);
var frames = [];
for (var i=0; i <= 3; i++) {
var str = "papa-smurf" + i + ".png";
var frame = cache.getSpriteFrame(str);
frames.push(frame);
}
var papaSmurf = cc.Sprite.createWithSpriteFrameName("papa-
smurf0.png");
Animando o objeto
var animation = cc.Animation.create(frames, 0.2);
var animate = cc.Animate.create(animation);
var runningAction = cc.RepeatForever.create(animate);
papaSmurf.runAction(runningAction);
Animando o objeto
var moveRight = cc.MoveTo.create(4.5, cc.p(240, 65));
var turnLeft = cc.FlipX.create(true);
var moveLeft = cc.MoveTo.create(4.5, cc.p(100, 65));
var turnRight = cc.FlipX.create(false);
var walkingSequence = cc.Sequence.create(moveRight, turnLeft,
moveLeft, turnRight);
var walkingAction = cc.RepeatForever.create(walkingSequence);
papaSmurf.runAction(walkingAction);
Do you even
OO?
Sprites = objetos
var BoxSprite = cc.Sprite.extend({
texture: 's_Box',
closed: true,
points: 100,
openBox: function() {
// lógica para recompensar o jogador
}
});
BoxSprite.create = function() {
var texture = cc.TextureCache.getInstance().addImage(s_Box);
var box = new BoxSprite();
box.initWithTexture(texture);
return box;
}
BoxSprite.js
Sprites = objetos
// Resto do código
var box = BoxSprite.create();
box.setPosition(350, 35);
this.addChild(box);
GameLayer.js
If you choke a smurf,
what color does it
turn?
Como simular
física?
Engines suportadas
Física com engine
Chipmunk!
Criando o objeto space
var GameScene = cc.Scene.extend({
space: null,
initPhysics: function() {
this.space = new cp.Space();
this.space.gravity = cp.v(0, -350);
},
onEnter: function() {
// Inicialização dos layers
}
}
GameScene.js
Criando o objeto space
var GameScene = cc.Scene.extend({
space: null,
initPhysics: function() {
// Criação do space
},
onEnter: function() {
this._super();
this.initPhysics();
this.addChild(new BackgroundLayer());
this.addChild(new GameLayer(this.space));
this.addChild(new HudLayer());
}
}
GameScene.js
Criando o objeto space
var GameScene = cc.Scene.extend({
space: null,
initPhysics: function() {
// Criação do space
},
onEnter: function() {
// Resto da function onEnter
this.scheduleUpdate();
},
update: function(dt) {
this.space.step(dt);
}
}
GameScene.js
Criando o objeto space
var GameLayer = cc.Layer.extend({
ctor: function(space) {
this._super();
this.init();
},
init: function() {
// Resto do método init
}
}
GameLayer.js
Corpo com Sprite
var papaSmurf = cc.Sprite
.createWithSpriteFrameName("papa-smurf0.png");
var papaSmurf = cc.PhysicsSprite
.createWithSpriteFrameName("papa-smurf0.png");
O sprite está pronto!
Mas ainda falta o corpo
Corpo com Sprite
var corpo = this.space.addBody(new cp.Body(10,
cp.momentForBox(10 60, 90)));
var forma = this.space.addShape(new
cp.BoxShape(corpo, 60, 90));
forma.setElasticity(0.6);
forma.setFriction(1);
corpo.setPos(cc.p(160, 62));
papaSmurf.setBody(corpo);
Criando um corpo no espaço
var winSize = cc.Director.getInstance().getWinSize();
var staticBody = this.space.staticBody;
var height = 30;
var chao = new cp.SegmentShape(staticBody,
cp.v(0, height),
cp.v(winSize.width, height), 0);
chao.setElasticity(1);
chao.setFriction(1);
this.space.addStaticShape(chao);
GameScene.initPhysics
Debug
this._debugNode = cc.PhysicsDebugNode
.create(this.space);
this.addChild(this._debugNode, 10);
Debug
Lendo inputs do
jogador
Mouse ou touch?
var GameLayer = cc.Layer.extend({
ctor: function(space) {
this._super();
if( 'touches' in sys.capabilities ) {
this.setTouchEnabled(true);
}
if( 'mouse' in sys.capabilities ) {
this.setMouseEnabled(true);
}
// Resto do código
});
GameLayer.js
Criar um sprite!
With physics!
PhysicsSprite!
createBall: function(location) {
var bola = cc.PhysicsSprite.create(s_Ball);
this.addChild(bola);
var corpo = this.space.addBody(new cp.Body(1,
cp.momentForCircle(20, 0, 26, cp.v(0,0))));
var forma = this.space.addShape(
new cp.CircleShape(corpo, 26, cp.v(0,0)));
forma.setElasticity(0.8);
forma.setFriction(1);
corpo.setPos(location);
bola.setBody(corpo);
bola.setScale(0.8);
}
GameLayer.js
Mouse?
onMouseUp: function(event) {
var location = event.getLocation();
this.createBall(location);
}
GameLayer.js
Touch?
onTouchesEnded: function(touches, event) {
if (touches.length <= 0)
return;
var touch = touches[0];
var location = touch.getLocation();
this.createBall(location);
}
GameLayer.js
Que jogo não tem
som?
Audio
GameLayer.js
var audioEngine = cc.AudioEngine.getInstance();
GameLayer.onEnter
audioEngine.playMusic(s_Music, true);
GameLayer.onMouseUp / onTouchesEnded
audioEngine.playEffect(s_SoundEffect);
Criando o jogo
mobile
Cocos2d-x
cocos2d-x/tools/project_creator/create_project.py
project_creator$ python create_project.py -project
NomeDoProjeto -package br.com.projeto -language javascript
Cocos2d-x
cocos2d-x/projects/NomeDoProjeto
Cocos2d-x
proj.ios
proj.win32
Classes
Resources
Eclipse
Xcode
Visual Studio
Classes C++
Nosso código
fonte
proj.android
Resources
appFiles
Android
JDK / SDK 1.6+
NDK r9d+
Eclipse com ADT
Obrigado!

Contenu connexe

Tendances

TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5Willian Molinari
 
Desenvolvendo Jogos 2D em HTML5 - Cocos2d-x
Desenvolvendo Jogos 2D em HTML5 - Cocos2d-xDesenvolvendo Jogos 2D em HTML5 - Cocos2d-x
Desenvolvendo Jogos 2D em HTML5 - Cocos2d-xPedro Kayatt
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenziejonathanblacknight
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Flávio Ribeiro
 
Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Odair Bonin Borges
 
Construção de interfaces on-demand baseadas em Realidade Aumentada Projetiva ...
Construção de interfaces on-demand baseadas em Realidade Aumentada Projetiva ...Construção de interfaces on-demand baseadas em Realidade Aumentada Projetiva ...
Construção de interfaces on-demand baseadas em Realidade Aumentada Projetiva ...Christopher Cerqueira
 
Construção de jogos com o motor unity3d (2013)
Construção de jogos com o motor unity3d (2013)Construção de jogos com o motor unity3d (2013)
Construção de jogos com o motor unity3d (2013)Eduardo Bonfandini
 
Apostila de Jogos em Rede com Java
Apostila de Jogos em Rede com JavaApostila de Jogos em Rede com Java
Apostila de Jogos em Rede com JavaMarco Reis
 
Desenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaDesenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaBruno Croci
 
[Android devcamp] Android Bootcamp – 2012
[Android devcamp] Android Bootcamp – 2012[Android devcamp] Android Bootcamp – 2012
[Android devcamp] Android Bootcamp – 2012Douglas Drumond
 

Tendances (16)

TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
 
Desenvolvendo Jogos 2D em HTML5 - Cocos2d-x
Desenvolvendo Jogos 2D em HTML5 - Cocos2d-xDesenvolvendo Jogos 2D em HTML5 - Cocos2d-x
Desenvolvendo Jogos 2D em HTML5 - Cocos2d-x
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
 
Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2
 
Aula1 intro
Aula1  introAula1  intro
Aula1 intro
 
Aula3 input
Aula3   inputAula3   input
Aula3 input
 
Introdução ao desenvolvimento de jogos com unity3d
Introdução ao desenvolvimento de jogos com unity3dIntrodução ao desenvolvimento de jogos com unity3d
Introdução ao desenvolvimento de jogos com unity3d
 
Construção de interfaces on-demand baseadas em Realidade Aumentada Projetiva ...
Construção de interfaces on-demand baseadas em Realidade Aumentada Projetiva ...Construção de interfaces on-demand baseadas em Realidade Aumentada Projetiva ...
Construção de interfaces on-demand baseadas em Realidade Aumentada Projetiva ...
 
Construção de jogos com o motor unity3d (2013)
Construção de jogos com o motor unity3d (2013)Construção de jogos com o motor unity3d (2013)
Construção de jogos com o motor unity3d (2013)
 
Aula maps
Aula mapsAula maps
Aula maps
 
WRVA 2015
WRVA 2015WRVA 2015
WRVA 2015
 
Apostila de Jogos em Rede com Java
Apostila de Jogos em Rede com JavaApostila de Jogos em Rede com Java
Apostila de Jogos em Rede com Java
 
JavaScript Hacks
JavaScript HacksJavaScript Hacks
JavaScript Hacks
 
Desenvolvimento de Jogos em Java
Desenvolvimento de Jogos em JavaDesenvolvimento de Jogos em Java
Desenvolvimento de Jogos em Java
 
[Android devcamp] Android Bootcamp – 2012
[Android devcamp] Android Bootcamp – 2012[Android devcamp] Android Bootcamp – 2012
[Android devcamp] Android Bootcamp – 2012
 

Similaire à Do zero ao jogo multiplataforma com cocos2d

Computer on the Beach 2015 - Minicurso de Jogos Multiplataforma com Cocos2d-x
Computer on the Beach 2015 - Minicurso de Jogos Multiplataforma com Cocos2d-xComputer on the Beach 2015 - Minicurso de Jogos Multiplataforma com Cocos2d-x
Computer on the Beach 2015 - Minicurso de Jogos Multiplataforma com Cocos2d-xPedro Kayatt
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developersjuliocoopergames
 
Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3Odair Bonin Borges
 
Passo a passo com o vaca5
Passo a passo com o vaca5Passo a passo com o vaca5
Passo a passo com o vaca5Hamilton Lima
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphereEloi Júnior
 
Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataformaAndré Santee
 
Aprendendo a Construir jogos com o Construct 2
Aprendendo a Construir jogos com o Construct 2 Aprendendo a Construir jogos com o Construct 2
Aprendendo a Construir jogos com o Construct 2 Diogo Padilha
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-androidAlberto Souza
 
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso UnipDesenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso Unipjonathanblacknight
 
Apresentação 29 06-11
Apresentação 29 06-11Apresentação 29 06-11
Apresentação 29 06-11Renan Nespolo
 
Erick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterErick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterDevCamp Campinas
 
Mágica com qt’s meta object system
Mágica com qt’s meta object systemMágica com qt’s meta object system
Mágica com qt’s meta object systemRodrigo Delduca
 
Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsHelder da Rocha
 
Palestra o melonjs [Flisol]
Palestra o melonjs [Flisol]Palestra o melonjs [Flisol]
Palestra o melonjs [Flisol]Luis4raujo
 
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In SantosDesenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In Santosjonathanblacknight
 
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec SantosDesenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santosjonathanblacknight
 

Similaire à Do zero ao jogo multiplataforma com cocos2d (20)

Computer on the Beach 2015 - Minicurso de Jogos Multiplataforma com Cocos2d-x
Computer on the Beach 2015 - Minicurso de Jogos Multiplataforma com Cocos2d-xComputer on the Beach 2015 - Minicurso de Jogos Multiplataforma com Cocos2d-x
Computer on the Beach 2015 - Minicurso de Jogos Multiplataforma com Cocos2d-x
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developers
 
Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3
 
Passo a passo com o vaca5
Passo a passo com o vaca5Passo a passo com o vaca5
Passo a passo com o vaca5
 
Tutorial Desenvolvendo Pong no Unity 3D - Victory Island Studios
Tutorial Desenvolvendo Pong no Unity 3D - Victory Island StudiosTutorial Desenvolvendo Pong no Unity 3D - Victory Island Studios
Tutorial Desenvolvendo Pong no Unity 3D - Victory Island Studios
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
 
Oficina kinect
Oficina kinectOficina kinect
Oficina kinect
 
Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataforma
 
Aprendendo a Construir jogos com o Construct 2
Aprendendo a Construir jogos com o Construct 2 Aprendendo a Construir jogos com o Construct 2
Aprendendo a Construir jogos com o Construct 2
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso UnipDesenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
 
Apresentação 29 06-11
Apresentação 29 06-11Apresentação 29 06-11
Apresentação 29 06-11
 
Erick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterErick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em Flutter
 
Mágica com qt’s meta object system
Mágica com qt’s meta object systemMágica com qt’s meta object system
Mágica com qt’s meta object system
 
Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.js
 
Palestra o melonjs [Flisol]
Palestra o melonjs [Flisol]Palestra o melonjs [Flisol]
Palestra o melonjs [Flisol]
 
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In SantosDesenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
 
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec SantosDesenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
 

Do zero ao jogo multiplataforma com cocos2d