SlideShare a Scribd company logo
1 of 58
Desenvolvimento de Jogos
     com Cocos2d

  André “xorna” Espeiorin
@xorna
Sócio/Programador/Eletrecista da CodeRockr

Programador LAMP

Programador iOS

entre outras coisas
Um pouco sobre o Cocos2d
Open Source (BSD e MIT License)

Relativamente Novo (stable release em 2010)

Comunidade Crescente

Multi-plataforma

Centenas de jogos publicados

Relativamente bem documentado
Versões do Cocos2d
Original escrita em Python (multi-plataforma)
Portada em Objective-C (Plataforma Apple)
Portada em Java (Android)
Portada em Javascript
Portada em C++ (multi-plataforma, pero no
mucho)
CocosNet (C#, Mono)
Ruby (iOS)
Cocos2d para iOS
Versão Atual 1.0.1
Muito utilizado, desde desenvolvedores Indies
até Zynga e Atari
Engines Físicas embarcadas:
 Chipmunk
 Box2D
Biblioteca de Áudio própria
Baseado em OpenGL ES 1.1
Cocos2d para iOS
Sprite Sheets
Suporte a Tiled Maps
Sistema de Partículas
Renderização de texto
Integração com o Game Center
Entre muitas outras features...
Toda a plataforma Apple
Exemplos
Zynga: FarmVille
Pro Zombie Soccer
Pro Zombie Soccer
Pro Zombie Soccer
Zombie Smash
Zombie Smash
Zombie Smash
Zombie Smash
Zombie Smash
O que preciso para começar?
Ambiente de desenvolvimento Apple:
 Mac
 Mac OS X
 Xcode com iOS SDK
 Cocos2d
Conhecimentos:
 Objective-C
 Desenvolvimento iOS (Não precisa ser
avançado)
 Dominar os conceitos a seguir apresentados
Conceitos Básicos
Scenes
Director
Layers
Sprites
Scenes
Classe CCScene
Uma “Cena”, “Tela” ou “parte” do jogo
Apenas uma cena é apresentada por vez
Exemplos: Menu, Fase X, Tela de Game Over, etc
Cada CCScene, possui pelo menos 1 CCLayer

                          Passar         Game
  Intro   Menu   Fase 1
                           Fase    ...   Over
Director
Classe CCDirector

“Dirige” o game

Transições, mudança de cena

Responsável por tudo por trás das Cenas

Responsável pela inicialização do OpenGL ES
Layers
Classe CCLayer
Área “Utilizável” da Cena
Podem ser usadas várias “camadas”
Definem aparência e comportamento da cena
Podem conter vários tipos de objetos
Podem ser transformadas assim como outros
objetos
Layers (Exemplo)
Layers (Exemplo)
Sprites
Classe CCSprite
Imagem 2D que pode ser transformada
Pode conter outros Sprites
Transformações no Sprite são propagadas para
todos os objetos “filhos”
Touch Screen
Muito mais possibilidades
Muito mais responsabilidades
Um pouco mais de trabalho para manipular
eventos
O Cocos2d para iOS possui 2 tipos de eventos:
 Standard Touch
 Targeted Touch
Standard Touch
Mesmos eventos do CocoaTouch
Ativado pela propriedade:
self.isTouchEnabled = YES;


Protocolo CCStandardTouchDelegate:
@protocol CCStandardTouchDelegate <NSObject>
@optional
- (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;
@end
Targeted Touch
Ao contrário do Standard, ele notifica um único
toque por vez
Para ativar as Notificações, você deve “registrar”
seu objeto:
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:
0 swallowsTouches:YES];}
Targeted Touch Delegate
@protocol CCTargetedTouchDelegate <NSObject>
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;
@optional
// touch updates:
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event;
@end
Qual devo usar?
Standard se você precisa de manipular vários
toques simultâneos
Targeted se você procura algo simples, com
apenas um toque por vez
Ações Básicas
Mover elementos
Rotacionar elementos
Mostrar/Esconder elementos
Redimensionar elementos
Todas as ações podem ser animadas
Ações Compostas
Executar Ações em sequência
Executar várias Ações ao mesmo tempo
Repetir Ações
Repetir Ações em looping
Suavização de Ações (Básicas)
Tornam as transições/animações mais suaves
Transições com variações na aceleração
Suavização de Ações (Básicas)
Tornam as transições/animações mais suaves
Transições com variações na aceleração

    linear
Suavização de Ações (Básicas)
Tornam as transições/animações mais suaves
Transições com variações na aceleração

    linear   easeInCubic
Suavização de Ações (Básicas)
Tornam as transições/animações mais suaves
Transições com variações na aceleração

    linear   easeInCubic   easeOutCubic
Suavização de Ações (Básicas)
Tornam as transições/animações mais suaves
Transições com variações na aceleração

    linear   easeInCubic   easeOutCubic   easeInOutCubic
Ações Especiais
CallFunc / CallBlock
Chamar methodo após execução de uma Ação
id actionTo = [CCMoveTo actionWithDuration: 2 position: ccp(s.width-40,
s.height-40)];
id actionBy = [CCMoveBy actionWithDuration: 2 position: ccp(80,80)];
id actionCallFunc = [CCCallFunc actionWithTarget:self
selector:@selector(doATask)];
 
id actionSequence = [CCSequence actions: actionTo, actionBy,
actionCallFunc, nil];
Talk is Cheap, show me the code ;)
Baixar Cocos2d
$ git clone git://github.com/cocos2d/cocos2d-iphone.git
$ cd cocos2d-iphone
$ git checkout develop
Instalar Templates Cocos2d
No diretório do Cocos2d, executar o seguinte
script:
$ cd cocos2d-iphone/
$ ./install-templates.sh
Criar um projeto Cocos2d
Arquivos Criados
Executar projeto criado
Anatomia do CCLayer (header)


 // When you import this file, you import all the cocos2d classes
 #import "cocos2d.h"

 // HelloWorldLayer
 @interface HelloWorldLayer : CCLayer
 {
 }

 // returns a CCScene that contains the HelloWorldLayer as the only
 child
 +(CCScene *) scene;

 @end
Anatomia do CCLayer (Implementação)
 // Import the interfaces
 #import "HelloWorldLayer.h"

 // HelloWorldLayer implementation
 @implementation HelloWorldLayer

 +(CCScene *) scene
 {
 ! // 'scene' is an autorelease object.
 ! CCScene *scene = [CCScene node];
 !
 ! // 'layer' is an autorelease object.
 ! HelloWorldLayer *layer = [HelloWorldLayer node];
 !
 ! // add layer as a child to scene
 ! [scene addChild: layer];
 !
 ! // return the scene
 ! return scene;
 }
Anatomia do CCLayer (Implementação)

 // on "init" you need to initialize your instance
 -(id) init
 {
 ! // always call "super" init
 ! // Apple recommends to re-assign "self" with the "super" return value
 ! if( (self=[super init])) {
 ! !
 ! ! // create and initialize a Label
 ! ! CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World"
 fontName:@"Marker Felt" fontSize:64];

 !   !   // ask director the the window size
 !   !   CGSize size = [[CCDirector sharedDirector] winSize];
 !
 !   ! // position the label on the center of the screen
 !   ! label.position = ccp( size.width /2 , size.height/2 );
 !   !
 !   ! // add the label as a child to this Layer
 !   ! [self addChild: label];
 !   }
 !   return self;
 }
Alteração no Header da Layer


#import "cocos2d.h"

// HelloWorldLayer
@interface HelloWorldLayer : CCLayer <CCTargetedTouchDelegate>
{
    CCSprite *troll;
}

@property (nonatomic, retain) CCSprite *troll;

// returns a CCScene that contains the HelloWorldLayer as the only child
+(CCScene *) scene;
- (void) trollolol;

@end
Criação de Sprites

-(id) init
{
! if( (self=[super init])) {
        // Cria o Sprite Troll
!!    self.troll = [CCSprite spriteWithFile:@"Troll.png" rect:CGRectMake(0.0, 0.0,
128.0, 105.0)];

        // Posiciona ele em qualquer lugar
        [self trollolol];

        // Adiciona ele a Layer
        [self addChild:troll];

        // Registra o Targeted Touch
        [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0
swallowsTouches:YES];
!}
! return self;
}
Método Trollolol


- (void) trollolol {
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    int minY = troll.contentSize.height/2;
    int maxY = winSize.height - troll.contentSize.height/2;
    int rangeY = maxY - minY;
    int minX = troll.contentSize.width/2;
    int maxX = winSize.width - troll.contentSize.width / 2;
    int rangeX = maxX - minX;
    int actualY = (arc4random() % rangeY) + minY;
    int actualX = (arc4random() % rangeX) + minX;
    troll.position = ccp(actualX, actualY);
}
Manipular o Touch



- (BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
    CGPoint touchPoint = [self convertTouchToNodeSpace:touch];
    if (CGRectContainsPoint(troll.boundingBox, touchPoint)) {
        [self trollolol];
        return YES;
    }
    return NO;
}
Resultado
Resultado
Resultado
Resultado
Resultado
Dúvidas?
Código fonte
https://github.com/xorna/CodeRockrJam

More Related Content

What's hot

Desenvolvimento de jogos com HTML5 e javascript
Desenvolvimento de jogos com HTML5 e javascriptDesenvolvimento de jogos com HTML5 e javascript
Desenvolvimento de jogos com HTML5 e javascriptWillian Molinari
 
Criando Jogos com HTML5
Criando Jogos com HTML5Criando Jogos com HTML5
Criando Jogos com HTML5José Farias
 
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
 
Apresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaApresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaGPrimola
 
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
 
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
 
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
 
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
 
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
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldThiago Soares
 

What's hot (18)

Desenvolvimento de jogos com HTML5 e javascript
Desenvolvimento de jogos com HTML5 e javascriptDesenvolvimento de jogos com HTML5 e javascript
Desenvolvimento de jogos com HTML5 e javascript
 
Criando Jogos com HTML5
Criando Jogos com HTML5Criando Jogos com HTML5
Criando Jogos com HTML5
 
Aula1 intro
Aula1  introAula1  intro
Aula1 intro
 
Aula3 input
Aula3   inputAula3   input
Aula3 input
 
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
 
Apresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno CottaApresentacao android por Júlio Cesar Bueno Cotta
Apresentacao android por Júlio Cesar Bueno Cotta
 
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
 
Introdução à OpenGL
Introdução à OpenGLIntrodução à OpenGL
Introdução à OpenGL
 
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
 
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
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
WRVA 2015
WRVA 2015WRVA 2015
WRVA 2015
 
Mobile conf
Mobile confMobile conf
Mobile conf
 
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
 
JavaScript Hacks
JavaScript HacksJavaScript Hacks
JavaScript Hacks
 
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 ...
 
JavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorldJavaDay2018 - Docker - Além do HelloWorld
JavaDay2018 - Docker - Além do HelloWorld
 
Curso de Groovy
Curso de GroovyCurso de Groovy
Curso de Groovy
 

Viewers also liked

Desenvolvimento de aplicativos Universais para iOS
Desenvolvimento de aplicativos Universais para iOSDesenvolvimento de aplicativos Universais para iOS
Desenvolvimento de aplicativos Universais para iOSAndré Espeiorin
 
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
 
Iniciando desenvolvimento i os
Iniciando desenvolvimento i osIniciando desenvolvimento i os
Iniciando desenvolvimento i osLuyz Garcia
 
Mobile, por onde e como começar
Mobile, por onde e como começarMobile, por onde e como começar
Mobile, por onde e como começarAndré Espeiorin
 
Iniciando o desenvolvimento em iOS
Iniciando o desenvolvimento em iOSIniciando o desenvolvimento em iOS
Iniciando o desenvolvimento em iOSMarcus Paulo
 
Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Jorge Cardoso
 
iOS: evolução e mercado
iOS: evolução e mercadoiOS: evolução e mercado
iOS: evolução e mercadoErick Jung
 
BRAPPS: Segurança no iPhone/iOS - Pedro Franceschi [Pagar.me]
BRAPPS: Segurança no iPhone/iOS - Pedro Franceschi [Pagar.me]BRAPPS: Segurança no iPhone/iOS - Pedro Franceschi [Pagar.me]
BRAPPS: Segurança no iPhone/iOS - Pedro Franceschi [Pagar.me]Brapps Brasil
 
Arquitetura dos dispositivos móveis
Arquitetura dos dispositivos móveisArquitetura dos dispositivos móveis
Arquitetura dos dispositivos móveisAlexsander Fontes
 
Arquitetura de dispositivos móveis
Arquitetura de dispositivos móveis Arquitetura de dispositivos móveis
Arquitetura de dispositivos móveis Italo Andrade
 
Sistema Operacional Móvel iOS
Sistema Operacional Móvel iOSSistema Operacional Móvel iOS
Sistema Operacional Móvel iOSDj Black
 
Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5Talita Pagani
 
Tecnologias da Informacao e seu Impacto na Sociedade
Tecnologias da Informacao e seu Impacto na SociedadeTecnologias da Informacao e seu Impacto na Sociedade
Tecnologias da Informacao e seu Impacto na SociedadeAdriana de Oliveira
 
IOS sistema operacional
IOS sistema operacionalIOS sistema operacional
IOS sistema operacionalHamburg Süd
 
SISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOSSISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOSTenshiDam
 

Viewers also liked (20)

Desenvolvimento de aplicativos Universais para iOS
Desenvolvimento de aplicativos Universais para iOSDesenvolvimento de aplicativos Universais para iOS
Desenvolvimento de aplicativos Universais para iOS
 
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
 
JavascriptCore
JavascriptCoreJavascriptCore
JavascriptCore
 
Iniciando desenvolvimento i os
Iniciando desenvolvimento i osIniciando desenvolvimento i os
Iniciando desenvolvimento i os
 
Mobile, por onde e como começar
Mobile, por onde e como começarMobile, por onde e como começar
Mobile, por onde e como começar
 
Iniciando o desenvolvimento em iOS
Iniciando o desenvolvimento em iOSIniciando o desenvolvimento em iOS
Iniciando o desenvolvimento em iOS
 
Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)Introdução à Programação para iPhone (iOS)
Introdução à Programação para iPhone (iOS)
 
iOS: evolução e mercado
iOS: evolução e mercadoiOS: evolução e mercado
iOS: evolução e mercado
 
BRAPPS: Segurança no iPhone/iOS - Pedro Franceschi [Pagar.me]
BRAPPS: Segurança no iPhone/iOS - Pedro Franceschi [Pagar.me]BRAPPS: Segurança no iPhone/iOS - Pedro Franceschi [Pagar.me]
BRAPPS: Segurança no iPhone/iOS - Pedro Franceschi [Pagar.me]
 
Arquitetura dos dispositivos móveis
Arquitetura dos dispositivos móveisArquitetura dos dispositivos móveis
Arquitetura dos dispositivos móveis
 
Arquitetura de dispositivos móveis
Arquitetura de dispositivos móveis Arquitetura de dispositivos móveis
Arquitetura de dispositivos móveis
 
Sistema Operacional Móvel iOS
Sistema Operacional Móvel iOSSistema Operacional Móvel iOS
Sistema Operacional Móvel iOS
 
Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5
 
SISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOSSISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOS
 
Tecnologias da Informacao e seu Impacto na Sociedade
Tecnologias da Informacao e seu Impacto na SociedadeTecnologias da Informacao e seu Impacto na Sociedade
Tecnologias da Informacao e seu Impacto na Sociedade
 
SISTEMA OPERATIVO iOS
SISTEMA OPERATIVO iOSSISTEMA OPERATIVO iOS
SISTEMA OPERATIVO iOS
 
Sistema Operacional iOS
Sistema Operacional iOSSistema Operacional iOS
Sistema Operacional iOS
 
IOS sistema operacional
IOS sistema operacionalIOS sistema operacional
IOS sistema operacional
 
SISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOSSISTEMA OPERATIVO IOS
SISTEMA OPERATIVO IOS
 
Sistema Operacional Android
Sistema Operacional AndroidSistema Operacional Android
Sistema Operacional Android
 

Similar to Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam

Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchCampus Party Brasil
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Aplicações móveis multi-plataforma com Titanium - Geek Night
Aplicações móveis multi-plataforma com Titanium - Geek NightAplicações móveis multi-plataforma com Titanium - Geek Night
Aplicações móveis multi-plataforma com Titanium - Geek NightEric Cavalcanti
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Intel Software Brasil
 
Introdução ao Titanium Mobile
Introdução ao Titanium MobileIntrodução ao Titanium Mobile
Introdução ao Titanium MobileEric Cavalcanti
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livrepichiliani
 
Desenvolvendo aplicações Adobe AIR para Android
Desenvolvendo aplicações Adobe AIR para AndroidDesenvolvendo aplicações Adobe AIR para Android
Desenvolvendo aplicações Adobe AIR para AndroidEric Cavalcanti
 
TDC 2016 - Animações no iOS
TDC 2016 - Animações no iOSTDC 2016 - Animações no iOS
TDC 2016 - Animações no iOSVictor Maraccini
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_onRoberson Alves
 
Primeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-CPrimeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-Cosnipso
 
Introducao a Linguagem Kotlin
Introducao a Linguagem KotlinIntroducao a Linguagem Kotlin
Introducao a Linguagem KotlinCalebeMiquissene
 
Apresentação tcd
Apresentação tcdApresentação tcd
Apresentação tcdThata2012
 
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
 
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Stefanini
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersiMasters
 

Similar to Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam (20)

Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-Touch
 
Caelum Day In Rio
Caelum Day In RioCaelum Day In Rio
Caelum Day In Rio
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Aplicações móveis multi-plataforma com Titanium - Geek Night
Aplicações móveis multi-plataforma com Titanium - Geek NightAplicações móveis multi-plataforma com Titanium - Geek Night
Aplicações móveis multi-plataforma com Titanium - Geek Night
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013
 
Introdução ao Titanium Mobile
Introdução ao Titanium MobileIntrodução ao Titanium Mobile
Introdução ao Titanium Mobile
 
Apresentação Phonegap
Apresentação PhonegapApresentação Phonegap
Apresentação Phonegap
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livre
 
Desenvolvendo aplicações Adobe AIR para Android
Desenvolvendo aplicações Adobe AIR para AndroidDesenvolvendo aplicações Adobe AIR para Android
Desenvolvendo aplicações Adobe AIR para Android
 
TDC 2016 - Animações no iOS
TDC 2016 - Animações no iOSTDC 2016 - Animações no iOS
TDC 2016 - Animações no iOS
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
Primeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-CPrimeiros passos no iOS com Objective-C
Primeiros passos no iOS com Objective-C
 
Introducao a Linguagem Kotlin
Introducao a Linguagem KotlinIntroducao a Linguagem Kotlin
Introducao a Linguagem Kotlin
 
Apresentação tcd
Apresentação tcdApresentação tcd
Apresentação tcd
 
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
 
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
 
Principais dicas para UIs do Android
Principais dicas para UIs do AndroidPrincipais dicas para UIs do Android
Principais dicas para UIs do Android
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game Developers
 
OOP ObjC
OOP ObjCOOP ObjC
OOP ObjC
 

Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam

  • 1. Desenvolvimento de Jogos com Cocos2d André “xorna” Espeiorin
  • 2. @xorna Sócio/Programador/Eletrecista da CodeRockr Programador LAMP Programador iOS entre outras coisas
  • 3. Um pouco sobre o Cocos2d Open Source (BSD e MIT License) Relativamente Novo (stable release em 2010) Comunidade Crescente Multi-plataforma Centenas de jogos publicados Relativamente bem documentado
  • 4. Versões do Cocos2d Original escrita em Python (multi-plataforma) Portada em Objective-C (Plataforma Apple) Portada em Java (Android) Portada em Javascript Portada em C++ (multi-plataforma, pero no mucho) CocosNet (C#, Mono) Ruby (iOS)
  • 5. Cocos2d para iOS Versão Atual 1.0.1 Muito utilizado, desde desenvolvedores Indies até Zynga e Atari Engines Físicas embarcadas: Chipmunk Box2D Biblioteca de Áudio própria Baseado em OpenGL ES 1.1
  • 6. Cocos2d para iOS Sprite Sheets Suporte a Tiled Maps Sistema de Partículas Renderização de texto Integração com o Game Center Entre muitas outras features...
  • 18. O que preciso para começar? Ambiente de desenvolvimento Apple: Mac Mac OS X Xcode com iOS SDK Cocos2d Conhecimentos: Objective-C Desenvolvimento iOS (Não precisa ser avançado) Dominar os conceitos a seguir apresentados
  • 20. Scenes Classe CCScene Uma “Cena”, “Tela” ou “parte” do jogo Apenas uma cena é apresentada por vez Exemplos: Menu, Fase X, Tela de Game Over, etc Cada CCScene, possui pelo menos 1 CCLayer Passar Game Intro Menu Fase 1 Fase ... Over
  • 21. Director Classe CCDirector “Dirige” o game Transições, mudança de cena Responsável por tudo por trás das Cenas Responsável pela inicialização do OpenGL ES
  • 22. Layers Classe CCLayer Área “Utilizável” da Cena Podem ser usadas várias “camadas” Definem aparência e comportamento da cena Podem conter vários tipos de objetos Podem ser transformadas assim como outros objetos
  • 25. Sprites Classe CCSprite Imagem 2D que pode ser transformada Pode conter outros Sprites Transformações no Sprite são propagadas para todos os objetos “filhos”
  • 26. Touch Screen Muito mais possibilidades Muito mais responsabilidades Um pouco mais de trabalho para manipular eventos O Cocos2d para iOS possui 2 tipos de eventos: Standard Touch Targeted Touch
  • 27. Standard Touch Mesmos eventos do CocoaTouch Ativado pela propriedade: self.isTouchEnabled = YES; Protocolo CCStandardTouchDelegate: @protocol CCStandardTouchDelegate <NSObject> @optional - (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; @end
  • 28. Targeted Touch Ao contrário do Standard, ele notifica um único toque por vez Para ativar as Notificações, você deve “registrar” seu objeto: [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority: 0 swallowsTouches:YES];}
  • 29. Targeted Touch Delegate @protocol CCTargetedTouchDelegate <NSObject> - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event; @optional // touch updates: - (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event; - (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event; - (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event; @end
  • 30. Qual devo usar? Standard se você precisa de manipular vários toques simultâneos Targeted se você procura algo simples, com apenas um toque por vez
  • 31. Ações Básicas Mover elementos Rotacionar elementos Mostrar/Esconder elementos Redimensionar elementos Todas as ações podem ser animadas
  • 32. Ações Compostas Executar Ações em sequência Executar várias Ações ao mesmo tempo Repetir Ações Repetir Ações em looping
  • 33. Suavização de Ações (Básicas) Tornam as transições/animações mais suaves Transições com variações na aceleração
  • 34. Suavização de Ações (Básicas) Tornam as transições/animações mais suaves Transições com variações na aceleração linear
  • 35. Suavização de Ações (Básicas) Tornam as transições/animações mais suaves Transições com variações na aceleração linear easeInCubic
  • 36. Suavização de Ações (Básicas) Tornam as transições/animações mais suaves Transições com variações na aceleração linear easeInCubic easeOutCubic
  • 37. Suavização de Ações (Básicas) Tornam as transições/animações mais suaves Transições com variações na aceleração linear easeInCubic easeOutCubic easeInOutCubic
  • 38. Ações Especiais CallFunc / CallBlock Chamar methodo após execução de uma Ação id actionTo = [CCMoveTo actionWithDuration: 2 position: ccp(s.width-40, s.height-40)]; id actionBy = [CCMoveBy actionWithDuration: 2 position: ccp(80,80)]; id actionCallFunc = [CCCallFunc actionWithTarget:self selector:@selector(doATask)];   id actionSequence = [CCSequence actions: actionTo, actionBy, actionCallFunc, nil];
  • 39. Talk is Cheap, show me the code ;)
  • 40. Baixar Cocos2d $ git clone git://github.com/cocos2d/cocos2d-iphone.git $ cd cocos2d-iphone $ git checkout develop
  • 41. Instalar Templates Cocos2d No diretório do Cocos2d, executar o seguinte script: $ cd cocos2d-iphone/ $ ./install-templates.sh
  • 42. Criar um projeto Cocos2d
  • 45. Anatomia do CCLayer (header) // When you import this file, you import all the cocos2d classes #import "cocos2d.h" // HelloWorldLayer @interface HelloWorldLayer : CCLayer { } // returns a CCScene that contains the HelloWorldLayer as the only child +(CCScene *) scene; @end
  • 46. Anatomia do CCLayer (Implementação) // Import the interfaces #import "HelloWorldLayer.h" // HelloWorldLayer implementation @implementation HelloWorldLayer +(CCScene *) scene { ! // 'scene' is an autorelease object. ! CCScene *scene = [CCScene node]; ! ! // 'layer' is an autorelease object. ! HelloWorldLayer *layer = [HelloWorldLayer node]; ! ! // add layer as a child to scene ! [scene addChild: layer]; ! ! // return the scene ! return scene; }
  • 47. Anatomia do CCLayer (Implementação) // on "init" you need to initialize your instance -(id) init { ! // always call "super" init ! // Apple recommends to re-assign "self" with the "super" return value ! if( (self=[super init])) { ! ! ! ! // create and initialize a Label ! ! CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World" fontName:@"Marker Felt" fontSize:64]; ! ! // ask director the the window size ! ! CGSize size = [[CCDirector sharedDirector] winSize]; ! ! ! // position the label on the center of the screen ! ! label.position = ccp( size.width /2 , size.height/2 ); ! ! ! ! // add the label as a child to this Layer ! ! [self addChild: label]; ! } ! return self; }
  • 48. Alteração no Header da Layer #import "cocos2d.h" // HelloWorldLayer @interface HelloWorldLayer : CCLayer <CCTargetedTouchDelegate> { CCSprite *troll; } @property (nonatomic, retain) CCSprite *troll; // returns a CCScene that contains the HelloWorldLayer as the only child +(CCScene *) scene; - (void) trollolol; @end
  • 49. Criação de Sprites -(id) init { ! if( (self=[super init])) { // Cria o Sprite Troll !! self.troll = [CCSprite spriteWithFile:@"Troll.png" rect:CGRectMake(0.0, 0.0, 128.0, 105.0)]; // Posiciona ele em qualquer lugar [self trollolol]; // Adiciona ele a Layer [self addChild:troll]; // Registra o Targeted Touch [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; !} ! return self; }
  • 50. Método Trollolol - (void) trollolol { CGSize winSize = [[CCDirector sharedDirector] winSize]; int minY = troll.contentSize.height/2; int maxY = winSize.height - troll.contentSize.height/2; int rangeY = maxY - minY; int minX = troll.contentSize.width/2; int maxX = winSize.width - troll.contentSize.width / 2; int rangeX = maxX - minX; int actualY = (arc4random() % rangeY) + minY; int actualX = (arc4random() % rangeX) + minX; troll.position = ccp(actualX, actualY); }
  • 51. Manipular o Touch - (BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event { CGPoint touchPoint = [self convertTouchToNodeSpace:touch]; if (CGRectContainsPoint(troll.boundingBox, touchPoint)) { [self trollolol]; return YES; } return NO; }

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n