José Enésio 4 Denunciar post Postado Fevereiro 14, 2008 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! 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
Eder Fortunato 15 Denunciar post Postado Fevereiro 17, 2008 valew José Enésio, é algo muito útil mesmo, e o código esta bem organizado vamos esperar os proximos []´s Compartilhar este post Link para o post Compartilhar em outros sites