Eu vou postar aqui uma breve ajuda q poderá ser d muita utilidade a todos!! gravidade, colisão perfeita e limites!!Eu utilizo flash 8 mas em versõs do MX pra cima funciona(Naum sei em CS3, pois ainda nao tenho)
crie um personagem de sua autoria ou pode fazer o mário ou o sonic, vc q sabe. Desenhe-o parado na tela. Selecione-o e aperte F8 e converta-o em movieclip, coloque o registration dele no canto inferior(pode ser esquerdo meio ou direito, eu aconselho o canto inferior do meio)
dê o nome de sua preferência) e aperte ok.
abra o movieclip personagem e aperte f6 para inserir um novo quadro q será o de andar. clique no desenho parado e o converta em movieclip e de o nome de andar!(aqui o registration naum tem importancia pode ser qualquer um)
faça a animação dele andando. Volte ao movie clip principal(personagem) e insira um novo quadro chave e agora faça uma animação de pular ou somente um desenho.
no movieclip personagem crie uma nova layer e chame de máscara. Desenhe um retângulo do tamanho de seu movie clip e converta-o em movie clip de máscara. dê o instance name dele de mascara(obs: Não é uma layer mascara e sim um movieclip)
Agora volte a cena principal.
Seu movieclip personagem estará na tela. instancie-o de player_mc.
crie agora uma plataforma retangular(retÂngulo) e converta-a em movie clip coloque o registration dela no canto superior(tanto faz esquerdo meio ou direito, só deve ser superior)
coloque a instance name de chao_mc0
agora na cena 1 insira uma nova layer e chame-a de actions
insira as seguintes ações
velAndar = 0;
vforce = 25;
horizontall = 0;
vertical = 2.8;
gravidade = .8;
accel = 1.2;
pulando = false;
caindo = true;
platform = null;
// Aqui coloca-se a função para se parar a gravidade quando encostada no chao
function tocarChaos() {
var i, yy, xx;
// um for para verificar quantos chãos há no jogo e seu limite
for (i=0; i<100; i++) {
//definimos uma variável que substitui todos os chãos da tela
platform = eval("_root.chao_mc"+i);
//Outras variávei q são mais em relação a posição do player
yy = player_mc._y+vertical;
xx = player_mc._x+horizontall;
//condição para parar a gravidade
if (player_mc._y<platform._y && yy>=platform._y && platform.hitTest(xx, platform._y) == true) {
//Essa linha é importante saber para a gravidade funcionar
// a plataforma deve estar no stage não pode estar em um
//movie clip q vc instanciar de fase!!
player_mc._y = platform._y;
//O
caindo = false;
vertical = 0;
return;
}
}
//o platform = null serve para dizer se o personagem está ou não encostado no chão
platform = null;
return;
}
//
//aqui entra toda a gravidade
function jogo() {
// pressionar a tecla para pular e verificar se já não está pulando
//para não pular novamente, por isso a necessidade do vertical = 0
if (vertical == 0 && Key.isDown(Key.SPACE) == true && lock) {
vertical = vforce*-1.30;
platform = null;
pulando = true;
}
// se o personagem estiver pulando
if (pulando == true) {
player_mc.gotoAndStop(3);
//o quadro em que estã a animação do player pulando
vertical = vertical*gravity;
//Aqui um cálculo matemático para desaceleração do pulo
//Condição para ver se o pulo está fraco se sim eu estarei caindo
if (Math.abs(vertical)<2) {
// O Math.abs pega o valor absoluto semarredondamento
vertical = Math.abs(vertical);
//Então eu caio
caindo = true;
pulando = false;
}
}
// Se eu estiver caindo
if (caindo == true) {
player_mc.gotoAndStop(3);
//chama a função para parar a gravidade se encostar no chao
tocarChaos();
//acelera a caída
vertical = vertical*accel;
//Condição para o valor da gravidade não ficar muito alto
if (Math.abs(vertical)>=20) {
vertical = 20;
}
}
//
//Condição que verifica se o player está no chao, senão ele estará caindo
if (platform != null && player_mc.hitTest(platform) == false) {
vertical = 2.8;
caindo = true;
}
//Fazer o player cair na velocidade da gravidade(pular também)
player_mc._y += vertical;
}
//Fazer o player se movimentar
player_mc.onEnterFrame = function() {
//Fazera mascara q colocamos ficar invisível
this.mascara._visible = false
//chamamos a função do jogo
jogo();
//Agora vamos definir os movimentos
velAndar = 0;
//Colocamos velAndar = 0 para quando não estivermos apertando nenhuma tecla
// a velocidade ficar zero
//Aqui fazemos o player andar na velocidade de andar
this._x += velAndar;
//Quando pressionarmos determinadas teclas
//se pressionarmos a tecla direita
if (Key.isDown(Key.RIGHT)) {
//velocidade andar fica 10 positivo para o player andar para a direita
velandar = 10;
//Fazer o personagem andar
this.gotoAndStop(2);
//Aqui fazemos o personagem virar para a direita
this._xscale = 100;
//se pressionar a tecla esquerda
} else if (Key.isDown(Key.LEFT)) {
//Velocidade fica negativa para ele ir para a esquerda
velAndar = -10;
//Fazer andar e virar para a esquerda
this.gotoAndStop(2);
this._xscale = -100;
} else {
//Se nenhuma dessas teclas for pressinadas eu fico parado
this.gotoAndStop(1);
}
};
agora faremos com que se ele tocar a parede pare de andar
Então desenhe um retângulo para uma parede e converta-o em moviecli(f8) dê o nome de parede(ou qualquer utro nome)
abra o movieclip parede e crie uma nova layer e nomeie-a de ações
coloque o seguinte código
//se a parede encostar no player
if(this.hitTest(_root.player_mc)){
//Aqui colocamos _root nates para identificar o nível da variável
_root.velAndar = 0
}
}
agora é só testar o filme(ctrl+enter)
a partir dessa base podemos construir va´rios jogos usando a imaginação
para ocenário é desenhá-lo e colcar no código para as plataformas ficarem invisíveis assim como as paredes e ir colocando os chãos e instanciando-os de chao_mc1, chao_mc2, choa_mc3 e eassim por diante.
bom aí eu coloco um jogo que estou fazendo de minha autoria, mas só tem a primeira fase. use a barra de espaço para pular as setas para mover e a seta de baixo para ele rolar, aperte enter para dar pause.
meu jogo
espero ter ajudado e até mais

Help















