Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

José Enésio

Carrinho em Flash

Recommended Posts

Hoje trouxe aqui um tutorial sobre como montar um carrinho no Flash!! Como o que me interessava era a funcionalidade do carro, por favor não reparem na buniteza que tá meu carro! hahahah

Bom já vo avisando gente, que esse tutorial é meio antiguinho e vão ter alguns errinhos na parte dos comandos, que já foram corrigidos e você pode pegar na classe que estarei disponibilizando para download no final. Mas de qualquer jeito, eu não sou nenhum mestre da física, mas eu tentei deixar o resultado mais legal possível, se quiser fazer alguns ajustes nos cálculos, vá em frente! Eu passei esse sistema pra classes, quem quiser tá no fim do post.

 

Primeiro, criem um carrinho qualquer. Tem que ter visão de cima senão vai ficar estranho hein!

 

Imagem Postada

 

Nota como o carro aponta pra cima. Faça assim também, você não quer um carro que ande de lado quer? hahaha!

 

Bom gente, agora vocês tem que transformar esse aí em Movie Clip! E agora vem a parte difícil, o código! Acho melhor não ir aos pouquinhos, senão você vai se confundir, porque o bixo é brabo! Então, vou passar tudo de uma vez, e comentar a utilidade de cada seção! Se liga, peixe:

 

onClipEvent (load) {
	//aqui definimos as variáveis, e então iniciamos o objeto keyListener, que vai pegar as informações das teclas!
	var topSpeed:Number = 200;
	var accel:Number = 5;
	var vSpeed:Number = 0;
	var steer:Number = 0;
	var steerSpeed:Number = 8;
	var brakePower:Number = 8;
	var brake:Boolean = false;
	var accelerator:Boolean = false;
	var keyListener:Object = new Object();
	keyListener.onKeyDown = function()
	{
		if (Key.isDown(Key.UP) && !accelerator)
		{
			accelerator = true;
		}
		if (Key.isDown(Key.DOWN) && !brake)
		{
			brake = true;
		}
		if (Key.isDown(Key.LEFT) && !steer)
		{
			steer = -1;
		}
		if (Key.isDown(Key.RIGHT) && !steer)
		{
			steer = 1;
		}
	};
	keyListener.onKeyUp = function()
	{
		if (!Key.isDown(Key.UP) && accelerator)
		{
			accelerator = false;
		}
		if (!Key.isDown(Key.DOWN) && brake)
		{
			brake = false;
		}
		if (!Key.isDown(Key.LEFT) && !Key.isDown(Key.RIGHT) && steer)
		{
			steer = 0;
		}
	};
	Key.addListener(keyListener);
}
onClipEvent (enterFrame) {
	//atualiza a posição do nosso carro
	this._x += this.vSpeed * Math.cos((this._rotation - 90) * Math.PI / 180);
	this._y += this.vSpeed * Math.sin((this._rotation - 90) * Math.PI / 180);
	//verifica se a "direção foi virada"
	if (this.steer != 0)
	{
		//aqui faz umas verificações, para adicioanr um pouco de realismo às curvas;
		//se o carro tá muito lento, ele não vira muito, se ele tá andando pra trás, a direção é "invertida"
		if (this.vSpeed > 0)
		{
			if (this.vSpeed > 3)
			{
				this._rotation += this.steer * this.steerSpeed;
			} else{
				this._rotation += this.steer * this.steerSpeed/this.vSpeed;
			}
		} else if(this.vSpeed <0)
		{
			if (this.vSpeed < -3)
			{
				this._rotation -= -this.steer * this.steerSpeed;
			} else{
				this._rotation -= -this.steer * this.steerSpeed/this.vSpeed;
			}
		}
	}
	
	//aqui é quando tá com o pé no acelerador, no caso a tecla da seta para cima!
	//também faz umas verificações para ver se já atingiu a velocidade máxima!
	if (this.accelerator)
	{
		if (this.vSpeed + this.accel > this.topSpeed / 10)
		{
			this.vSpeed = this.topSpeed / 10;
		} else
		{
			this.vSpeed += this.accel;
		}
	}
	//faz a verificação do freio, dá a ré se a velocidade é menor ou igual a 0 senão vai freando!
	if (this.brake)
	{
		if (this.vSpeed <= 0)
		{
			if (this.vSpeed - this.accel / 2 < -(this.topSpeed / 25))
			{
				this.vSpeed = -(this.topSpeed / 25);
			} else
			{
				this.vSpeed -= this.accel / 2;
			}
		} else
		{
			if (this.vSpeed - this.brakePower < 0)
			{
				this.vSpeed = 0;
			} else
			{
				this.vSpeed -= this.brakePower;
			}
		}
	}
	//se tá tudo livre, a nossa amiga física se encarrega de parar o carro!
	//por enquanto esse sistema tá muito primitivo, pretendo melhorar ele deixando mais realista a perda de velocidade
	//e também adicionando um atributo peso que influencia sobre essa variável
	if (!this.accelerator && !this.brake && this.vSpeed != 0)
	{
		if (this.vSpeed > 0)
		{
			if (this.vSpeed - this.accel / 2 < 0)
			{
				this.vSpeed = 0;
			} else
			{
				this.vSpeed -= this.accel / 2;
			}
		} else
		{
			if (this.vSpeed + this.accel / 2 > 0)
			{
				this.vSpeed = 0;
			} else
			{
				this.vSpeed += this.accel / 2;
			}
		}
	}
}

Agora que tá tudo pronto, é só rodar e partir pro abraço!

 

Falou até a próxima pessoal, aqui vai o exemplo funcional pra quem quer ver:

 

http://stuff.mihopa.info/carro/carro.swf

 

 

 

Aqui está a classe pessoal: http://stuff.mihopa.info/carrinho/Car.as

 

Essa já é uma versão mais avançada dela (v1.4). Mas a funcionalidade continua a mesma: crie uma instância da classe Car, setando as variáveis na ordem certa, então adicione foco ao seu carro com Car.focus() e impeça que ele continue recebendo eventos com Car.blur(). Existem outras funcionalidades que irei explicar em outro tutorial. Valeu pessoal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.