Source Acquaplay - Jogo desenvolvido em APE + Actionscript 3!


Fala galera!

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:

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

Download do código fonte do jogo!

Share and Enjoy:
  • Digg
  • del.icio.us
  • Netvouz
  • description
  • ThisNext
  • MisterWong
  • Wists

3 Responses to “Source Acquaplay - Jogo desenvolvido em APE + Actionscript 3!”

  1. fe.silverio says:

    Muito bom!

    Genial o exemplo… ganhou um novo leitor! XD

    Abraços
    Fe 013

  2. Alex Marques says:

    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

  3. admin says:

    @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! :P

    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!

Leave a Reply