Visão Geral
Segundo site do Cocos2d, Cocos2d for iPhone é um framework para desenvolver jogos 2D, demos e outras aplicações gráficas/interativas. Ele é baseado no padrão cocos2d: ele usa os mesmos conceitos, mas em vez de Python ele usa Objective-C.
Para os desenvolvedores do Framework, o Cocos2d for iPhone é:
- Fácil de usar: ele usa uma API familiar e vem com uma série de exemplos
- Rápido: ele usa boas práticas do OpenGL ES e otimiza estruturas de dados
- Flexível: ele é fácil de ser integrado com outras bibliotecas
- Grátis: é open source, compatível tanto com jogos abertos quanto fechados
- Comunidade: o cocos2d tem uma comunidade ativa, grande e amigável (fórum, IRC)
- Aprovado pela AppStore: mais de 550 jogos na AppStore o utilizam, incluindo vários jogos bem vendidos
O Cocos2d vem com uma API que torna simples a criação de projetos baseados no OpenGL ES, mesmo se você não é um expert com programação em OpenGL, uma vez que tem um bom encapsulamento de algumas funcionalidades bastante usadas.
Um ponto negativo em usar este tipo de ferramenta é que algumas vezes você se perde quando ele automatiza algo que você não gostaria que fosse feito. Criar uma camada transparente de OpenGL ES usando o Cocos2d tem esse problema. Uma vez que muitas pessoas da comunidade tiveram esse problema, resolvemos postar sobre isso.
Criando uma camada transparente do OpenGL ES Layer com o Cocos2d
Criar uma camada transparente de OpenGL ES com o Cocos2d v 0.99.4 não foi uma tarefa simples, uma vez que seu código template contém uma Macro para inicializar uma série de variáveis internas.
Se você ver a macro CC_DIRECTOR_INIT(), localizada no arquivo ccMacros.h, temos o seguinte:
#define CC_DIRECTOR_INIT() \ do { \ \ window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; \ \ if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] ) \ [CCDirector setDirectorType:kCCDirectorTypeNSTimer]; \ \ CCDirector *__director = [CCDirector sharedDirector]; \ [__director setDeviceOrientation:kCCDeviceOrientationPortrait]; \ [__director setDisplayFPS:NO]; \ [__director setAnimationInterval:1.0/60]; \ \ EAGLView *__glView = [EAGLView viewWithFrame:[window bounds] \ pixelFormat:kEAGLColorFormatRGB565 \ depthFormat:0 \ preserveBackbuffer:NO]; \ \ [__director setOpenGLView:__glView]; \ \ [window addSubview:__glView]; \ [window makeKeyAndVisible]; \ \ } while(0); \
Como podemos ver, esta macro cria um EAGLView que tem um pixelFormat do tipo kEAGLColorFormatRGB565, que é de 16 bits. Para termos transparencia habilitada no nosso EAGLView precisamos criá-la com o formato kEAGLColorFormatRGBA8, que é de 32 bits.
Temos diversas formas de resolver isso, como alterar a macro ou inicializar tudo por nossa conta. O importante é certificar-se de alterar a linha:
EAGLView *__glView = [EAGLView viewWithFrame:[window bounds] \ pixelFormat:kEAGLColorFormatRGB565 \ depthFormat:0 \ preserveBackbuffer:NO]; \
para
EAGLView *__glView = [EAGLView viewWithFrame:[window bounds] \ pixelFormat:kEAGLColorFormatRGBA8 \ depthFormat:0 \ preserveBackbuffer:NO]; \
Com isso, teremos nossa camada OpenGL ES transparente quando usando:
glClearColor(0, 0, 0, 0);
Na linha acima, o último parâmetro indica a opacidade
(http://www.khronos.org/opengles/sdk/1.1/docs/man/).
É isso! Esperamos que você goste do Cocos2d for iPhone e que esta dica lhe seja útil!
Este post também está disponível em inglês: Cocos2d for iPhone 0.99.4 – OpenGL ES Transparent Layer