Tip:
Highlight text to annotate it
X
Beleza, então o evento de "touch" já está pegando...
O que precisa agora, é criar toda a estrutura de física
O legal do Cocos2d é que ele já vem com uma biblioteca separada, chamada "chipmunk"
Eu vou importá-lo para dentro do nosso projeto
Eu tenho aqui o Cocos2d sempre atualizado, vou vir aqui na pasta "external"
pasta "Chipmunk", e queremos então esses "sources" (src)
Vamos adicionar dentro das nossas "libraries"
Vou copiar esses itens que estão no outro projeto...
e vou renomear a pasta "src" para "chipmunk"
O que vamos fazer? Primeiro vamos no nosso .h
e vamos colocar o #import do "chipmunk"
Agora lá na init, temos que criar todo o ambiente do chipmunk
Primeiro iniciálizamos o chipmunk, com a função "cpInitChipmunk()"
Com isso ele já inicia a biblioteca
O próximo passo é criar um "espaço"
e configurar esse "espaço"
esse "space" a gente tem que declarar como global
que vamos acessá-lo de vários lugares
setamos a gravidade, e a quantidade de iterações elásticas
então vamos declarar esse cara, cpSpace *space;
Beleza, a gente declarou e inicializou o espaço.
Que é o espaço que a gente vai colocar os objetos dentro
O próximo passo, é criar o corpo que será associoado a bola
Esse cara que vamos chamá-lo de "ball_body", e passamos alguns parâmetros por exemplo
a ***, etc.
Depois podemos setar essa posição do corpo, na mesma posição da bola
utilizando essa função "cpv", que é a mesma coisa que o ccp, só que do chipmunk
então dá na mesma utilizar o ccp ou cpv.
Então adicionamos este corpo no "espaço", utilizando a função "cpSpaceAddBody"
passando para ela o "space" e o "ball_body", então vamos declarar o ball_body...
como cpBody... cpBody *ball_body;
e para finalizar o que mais vamos precisar da bola, é um "cpShape"
que é quem vai configurar o formato da bola, para utilizar nas colisões
vou colocar aqui: "ball_shape"
e então vamos criar ele aqui.
O que vamos fazer aqui, vamos inicializar o shape com o formato de um círculo
passamos para ele o corpo que será associado e o tamanho do raio
e aqui seria o ponto de deslocamento do centro.
podemos configurar elasticidade, fricção e podemos guardar os dados
os dados, costuma se guardar a própria imagem, o próprio Sprite
e o collision_type, associamos um número que podemos passar depois para uma função
de colisão, onde passariamos esse número e o de uma parede por exemplo que seria outro
e para finalizar, adicionamos o shape no espaço, usando a função "cpSpaceAddShape"
Se rodarmos desse jeito, não acontecerá nada. Pois precisamos criar um método para atualizar
o chipmunk, isso porque o Cocos2d não atualiza ele automaticamente.
Então vamos criar uma função, "updateChipmunk"
e ela irá receber o parâmetro "ccTime" dt.
Essa função é quem irá atualizar o chipmunk
e é essa função que vai manter o sprite junto ao corpo
isso porque o corpo é invisível, mas vemos o sprite
então precisamos colocar o sprite aonde estiver esse corpo
Precisamos registrar essa função, então usamos
o método "schedule", passando o "selector" que é o nome da nossa função,
"updateChipmunk" e passa o intervalo, que é de quanto em quanto tempo a função será chamada
No caso vamos usar aqui a mesma quantidade de fps do Cocos2d, que é 1.0f/60
e ele irá chamar a função 60x por segundo.
O que fazemos aqui? Precisamos atualizar todos os objetos
do chipmunk, para isso existe a função "cpSpaceStep"
que recebe o espaço e a quantidade de tempo que é o próprio "dt"
e depois que atualizamos todos os componentes do espaço
precisamos setar a posição da bola, para onde está o corpo
que provavelmente vai sofrer algum tipo de ação
de acordo com a física do chipmunk
isso irá fazer com que o sprite siga o corpo invisível
Vamos rodar para ver o que vai acontecer?
Está certíssimo, a bola caiu pois temos gravidade , o mundo , a bola...
Só que esse mundo é um imenso vazio, pois só tem a bola e mais nada
Vamos deixar a bola um pouco mais para cima
então vamos setar a posição do Sprite.
Beleza! A bola caiu..., foi para o "espaço".
O que temos que fazer? Temos que colocar um chão...