Vou postar um pequeno jogo que desenvolvi pela Midia Digital, é um joguinho bem antigo! Quem é dos anos 90 lembra dele, consistia basicamente em apertar 2 botões tentando fazer com que as bolinhas ficassem em 2 spots!
hahah explicação bem estranha, porem ao ver o jogo vocês vão intender!
O bacana desse cógigo é que ele usa algumas técnicas em APE, que pode auxiliar você em varios outros projetos na mesma engine, por exemplo:
- Como adicionar uma força especifica em um unico lugar.
- Interação com força em botões.
Com isso a questão fica muito simples, o projeto se consiste em 2 unicos pontos:
- Criar o Puzzle na APE.
- Fazer as interações.
Ao criar o projeto na APE você tera toda a parte em que a física em si, vai interagir com as bolinhas:
acquaplayGroup = new Group(); acquaplayGroup.collideInternal = true; APEngine.addGroup(acquaplayGroup); //Creating Balls; var ball1Display:DisplayObject = new bola1(); var ball2Display:DisplayObject = new bola2(); var ball3Display:DisplayObject = new bola3(); var ball4Display:DisplayObject = new bola4(); var ball1:CircleParticle = new CircleParticle(70, 125, 6, false, 1, 0); var ball2:CircleParticle = new CircleParticle(87, 125, 6, false, 1, 0); var ball3:CircleParticle = new CircleParticle(105, 125, 6, false, 1, 0); var ball4:CircleParticle = new CircleParticle(121, 125, 6, false, 1, 0); ball1.sprite.name = "ball1"; ball2.sprite.name = "ball2"; ball3.sprite.name = "ball3"; ball4.sprite.name = "ball4"; acquaplayGroup.addParticle(ball1); acquaplayGroup.addParticle(ball2); acquaplayGroup.addParticle(ball3); acquaplayGroup.addParticle(ball4); //Creating Wall and obstacles var lWall:RectangleParticle = new RectangleParticle(8, 85, 1, 134, -.05, true); var rWall:RectangleParticle = new RectangleParticle(188, 85, 1, 134, .05, true); var tWall:RectangleParticle = new RectangleParticle(100, 18, 200, 1, 0, true); var bWall:RectangleParticle = new RectangleParticle(100, 153, 185, 1, 0, true); var blColision:RectangleParticle = new RectangleParticle(60, 142, 75, 0.5, -.13, true, 1, 0.0); var brColision:RectangleParticle = new RectangleParticle(133, 142, 75, 0.5, .13, true, 1, 0.0); rWall.setLine(0.1, 0x000, 1); tWall.setLine(0.1, 0x000, 1); lWall.setLine(0.1, 0x000, 1); bWall.setLine(0.1, 0x000, 1); blColision.setLine(1, 0x000, 1); brColision.setLine(1, 0x000, 1); acquaplayGroup.addParticle(lWall); acquaplayGroup.addParticle(rWall); acquaplayGroup.addParticle(tWall); acquaplayGroup.addParticle(bWall); acquaplayGroup.addParticle(blColision); acquaplayGroup.addParticle(brColision); var ob1left:RectangleParticle = new RectangleParticle(63, 82, 1, 20, 0, true); var ob1right:RectangleParticle = new RectangleParticle(80, 82, 1, 20, 0, true); var ob1Ldown:RectangleParticle = new RectangleParticle(68, 95, 10, 1, .6, true); var ob1Rdown:RectangleParticle = new RectangleParticle(75, 95, 10, 1, -.6, true); var ob2left:RectangleParticle = new RectangleParticle(120, 62, 1, 20, 0, true); var ob2right:RectangleParticle = new RectangleParticle(137, 62, 1, 20, 0, true); var ob2Ldown:RectangleParticle = new RectangleParticle(125, 75, 10, 1, .6, true); var ob2Rdown:RectangleParticle = new RectangleParticle(132, 75, 10, 1, -.6, true); ob2left.setLine(0.1, 0x000, 1); ob2right.setLine(0.1, 0x000, 1); ob2Ldown.setLine(0.1, 0x000, 1); ob2Rdown.setLine(0.1, 0x000, 1); ob1left.setLine(0.1, 0x000, 1); ob1right.setLine(0.1, 0x000, 1); ob1Ldown.setLine(0.1, 0x000, 1); ob1Rdown.setLine(0.1, 0x000, 1); acquaplayGroup.addParticle(ob2left); acquaplayGroup.addParticle(ob2right); acquaplayGroup.addParticle(ob2Ldown); acquaplayGroup.addParticle(ob2Rdown); acquaplayGroup.addParticle(ob1left); acquaplayGroup.addParticle(ob1right); acquaplayGroup.addParticle(ob1Ldown); acquaplayGroup.addParticle(ob1Rdown);
Com isso nosso puzzle ja esta ok! Agora é Customizar os objetos!
o proximo passo for criar os objetos para serem usados como skin dos meus objetos.
Criei 4 objetos diferentes e exportei como ball1, ball2, ball3 e ball4.
Agora crio os objetos como display object:
var ball1Display:DisplayObject = new bola1(); var ball2Display:DisplayObject = new bola2(); var ball3Display:DisplayObject = new bola3(); var ball4Display:DisplayObject = new bola4(); //e adiciono eles com a função setDisplay ball1.setDisplay(ball1Display, 0, 0, 0); ball2.setDisplay(ball2Display, 0, 0, 0); ball3.setDisplay(ball3Display, 0, 0, 0); ball4.setDisplay(ball4Display, 0, 0, 0);
a principal sacada, que acho que é bem interessante aqui, e pode ser utilizado em inumeros outros jogos, é justamente a seguinte parte:
no meu enterframe, eu utilizo a seguinte função:
for each(var p:AbstractParticle in acquaplayGroup.particles) { }
Ou seja, eu consigo pegar todas as minhas particulas que estão rodadndo na minha APE, e com isso, consigo tratar cada 1 de maneira diferente, então, eu quero pegar apenas as particulas que estão em movimento, verifico se ela é fixa ou não:
if (p.fixed == false) { }
E agora faço as verificações, se a bola, estiver em uma posisão x, com o botão estando apertado, aplique uma força no objeto:
if (p.px > 145 && p.px < 185 && p.py < 50 && p.py > 20) { p.addForce(new VectorForce(false, -.5, 0.5)); } else if (p.px > 4 && p.px < 62 && p.py < 50 && p.py > 20) { p.addForce(new VectorForce(false, .5, 0.5)); } if (bLeftForce) { if (p.px > 15 && p.px < 30 && p.py > 50) { p.addForce(new VectorForce(false, 0, -4)); } if (p.px > 4 && p.px < 62 && p.py < 50 && p.py > 20) { p.addForce(new VectorForce(false, 2, 0)); } } if (bRightForce) { if (p.px > 168 && p.px < 180 && p.py > 50) { p.addForce(new VectorForce(false, 0, -4)); } if (p.px > 145 && p.px < 185 && p.py < 50 && p.py > 20) { p.addForce(new VectorForce(false, -2, 0)); } }
Basicamente é isso, aqui em baixo você pode ver como ficou o projeto final:










Muito bom!
Genial o exemplo… ganhou um novo leitor! XD
Abraços
Fe 013
Bruno, gosto muito muito dos trabalhos que tem feito. Parabéns.
Estou precisando de uma ajuda, é que eu quero aprender programar AS3, mas eu não manjo nada de programação. Queria saber por onde começar, só uns conselhos. Não vou pedir pra você coisas pra mim e nada, só preciso que me diga por onde começar e o resto eu me viro.
Poderia me add no msn ? falecomlex@hotmail.com
@Alex Marques
Fala Alex tudo bem cara? Obrigado pelo comentário ai, mais assim cara, basicamente você ja programou em algum outra coisa?
O bacana seria você ja ter trabalhado com algum tipo de programação, pelo menos entender a lógica, ou o “portugal” como algumas faculdades chamam!
Assim, agora com actionscript 3, eu acredito que acabou ficando muito mais fácil do que trabalhar com Actionscript 2, devido a tudo ser mais Orientado a Objetos, aconselho para você começar, dar uma olhada nos post que tem no imasters, existem alguns exemplos bem bacanas para iniciar, e eles tem um post com uma introdução ao actionscript 3 bem bacana!
Os tutoriais do goToAndLearn.com também, são muito interessantes, vale a pena você dar uma olhada nisso, e qualquer duvida, não existe em perguntar! Vou ajudar no que eu puder!