Você faz hitTest dentro de um for no EnterFrame?

Flash games 3 Comments »

Então você faz hitTestObject no for dentro de um EnterFrame, hein? Deixa eu adivinhar:

hero.addEventListener(Event.ENTERFRAME, testaColisao);
function testaColisao(evt:Event):void{
       var hero:MovieClip=MovieClip(evt.currentTarget);
       var inimigo:MovieClip;
 
       for(var i:int=0; i < inimigos.lenght; i++){
              inimigo=MovieClip(inimigos[i]);
 
              if(hero.hitTestObject(inimigo)){
                     trace("bateu!!!");
              }
       }
}

Tá loco!!!

Quem sabe você pensa diferente e faz com um Array bidimensional? A idéia é que cada vez que (por exemplo), seu hero se mover ou se cenário se moverem, você muda o índice do Array. Se tem alguma coisa com que colidir, o ínidice é 1. Se não, é 0.

var mapa:Array= [
 [0,0,0,0,0,0,0,0],
 [0,0,0,0,1,0,0,0],
 [0,0,0,0,1,0,0,0],
 [0,0,0,0,1,0,0,0],
 [0,0,0,0,0,0,0,0],
 [0,0,0,1,1,1,0,0],
 [0,0,0,0,0,0,0,0],
 [0,0,0,0,0,0,0,0]
];
 
var vel:int=200/mapa[0].length;
var indiceX:int=4;
var indiceY:int=7;
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, moveCenario);
function moveCenario(evt:KeyboardEvent) {
	if (evt.keyCode==Keyboard.LEFT) {
		if (mapa[indiceY][indiceX-1]!=1) {
			indiceX-=1;
                            fundo.x+=vel;
	}
}

Neste exemplo o cenário anda apenas quando a tecla LEFT do teclado é pressionada. A posição inicial (os valores inicias das variáveis indiceX e indiceY) é dada pela posição do hero no cenário.
O resultado é este (clique sobre a]o swf para dar foco e use a tecla LEFT):

Você precisa ter o Flash player 9 para ver este conteúdo

O código que está aí não está completo… Você só vai conseguir dar um passo para cima (na verdade, é o cenário que se move) e vai dar de “cara” na parede.  Além disso, se você baixar o fla, vai perceber que não implementei controles de cenário (impedir a movimentação quando chegar nos extremos). Mas tudo isso é implementável. Esta base é usada por engines “isométricas” para controlar tanto a movimentação quanto as colisões e profundidades (o que está na frente e o que está atrás).

Uma engine bem conhecida é esta aqui: http://code.google.com/p/as3isolib/

E se você achou bala esse código (porque eu acho!) pode ler muito mais sobre isso neste site, que é uma importante referência para quem faz games (fpara flash): http://www.tonypa.pri.ee/

1258893321_Flash Baixe aqui o fla

PS: Este post foi escrito porque meus alunos de projeto de games, o Beto e o William me torraram a paciência até eu explicar como fazia isso. Eu não podia deixar eles fazendo hitTest no for dentro de um EnterFrame para um cenário com 5.000 pixels de largura. Boa sorte meninos! Quero ver esse jogo funcionando!

Você gosta de matemática?

Flash games 4 Comments »

Normalmente a resposta é negativa. Já tem muita gente queimando as pestanas pra entender porque quase ninguém gosta, e as possíveis causas vão deste o pouco empenho dos alunos até a forma como é ensinada.

Bem,  não tenho condições de entrar nessa discussão, mas acho uma pena que isso seja assim. Afinal, a matemática (pelo menos a de segundo grau) é um refúgio seguro para quem , como eu, fica meio perdido com esse mundo doido e sem sentido.

Bem, devaneios à parte, boa parte dos meus leitores gosta mesmo de lógica, afinal, aqui eu falo de programação e IHC, além de postar os meus programas e artigos científicos. Então devem gostar de matemática certo?

Ahn, não sei… Mas, para tentar mostrar que o assunto é realmente interessante, resolvi postar um exemplo de jogo que usa conceitos básicos de forma intensiva. É claro que vamos falar um pouco de trigonometria (buh!).

Read the rest of this entry »

Dropped educational game project

Aplicativos, Flash games, Informática na Educação No Comments »

This project taught me a lot of things: not only about actionscript, but also about management. I ended up embracing a project bigger than what I could handle alone, and raised expectations I couldnt meet. I took a responsability that – maybe – I shouldnt have taken: because when things got harder ($) the blame was all on me :0(
Althought neither me or any of my partners ever refused to keep it going (its schedule was four months ahead, so the picture wasnt that bad at all, in my opinion), the manager’s trust was dead broken, so we decided to leave.

Anyways, I still like the project, the code and I still think that, taken the way I advised, the game could be great…
Dont you agree? Check it out (sorry, no code this time)

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in