..:: MX Studio Fóruns ::..: parar movie clip com hittest(colisão) e teclas de direção - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




ATENÇÃO

Para evitar posts desnecessários e que não influam para o andamento e desenvolvimento do fórum, clique aqui e leia todas as regras.
Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

parar movie clip com hittest(colisão) e teclas de direção

#1 User is offline   Roberto Arruda 

  • Group: Membros
  • Posts: 15
  • Joined: 27-March 08

  Posted 26 April 2008 - 03:13 PM

Olá pessoal.

Gostaria de saber como fazer parar um movie clip, pois, quando ocorre a colisão o mesmo continua acelerado. Este movie clip funciona através das teclas de direção (pra cima, pra baixo e pros lados). Já procurei em diversos locais, já vi várias dicas, mas nenhuma delas serviram para parar o movie clip. O que chegou mais próximo e não consegui ver o código, foi o tutorial do megaman onde tem aquelas paredes que não deixam o personagem ultrapassa-la. Com certezxa é o código de lá, pq preciso que o movie clip continue a aceleração, desviando daquele obstáculo.
0

#2 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 27 April 2008 - 01:37 PM

Poste as ações que você está usando, inclusive as ações de colisão para que possamos ver o que pode estar errado e te ajudar a arrumar.

[]s
0

#3 User is offline   Roberto Arruda 

  • Group: Membros
  • Posts: 15
  • Joined: 27-March 08

Posted 27 April 2008 - 09:17 PM

Ok Natan segue abaixo:

A) Na timeline principal, camada ações:

CÓDIGO
frente = 0;
traseira = 0;

this.onEnterFrame = function () {
if (carro.parte1.hitTest (carrob)) {
frente = 1;
deformar ();
} else {
if (carro.parte2.hitTest (carrob)) {
traseira = 1;
deformar ();
setInterval(function(){_root.carro.gotoAndStop(1); }, 10000 );
clearInterval();
}}
if (carro.parte1.hitTest (carroc)) {
frente = 1;
deformar ();
} else {
if (carro.parte2.hitTest (carroc)) {
traseira = 1;
deformar ();
setInterval(function(){_root.carro.gotoAndStop(1); }, 10000 );
clearInterval();
}}
if (carro.parte1.hitTest (carrod)) {
frente = 1;
deformar ();
} else {
if (carro.parte2.hitTest (carrod)) {
traseira = 1;
deformar ();
setInterval(function(){_root.carro.gotoAndStop(1); }, 10000 );
clearInterval();
}}}


function deformar () {
if (frente == 0 and traseira == 0){
_root.carro.gotoAndStop (1);
} else {
if (frente == 1 and traseira == 0) {
_root.carro.gotoAndStop (2);
} else {
if (frente == 0 and traseira == 1) {
_root.carro.gotoAndStop (3);
} else {
if (frente == 1 and traseira == 1) {
_root.carro.gotoAndStop (4);
}
}
}
}
}



cool.gif Na timeline do carro:

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 = 100;
var accel:Number = 8;
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;
}
}
}
}


Por enquanto, agradeço.

0

#4 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 27 April 2008 - 11:29 PM

Vai ser mais complicado do que pensava, pois envolve muitos enterFrame algo que não é muito bom.

Pelo que eu pude ver, essa é a linha que movimenta o carro?

CÓDIGO
this._x += this.vSpeed * Math.cos((this._rotation - 90) * Math.PI / 180);
this._y += this.vSpeed * Math.sin((this._rotation - 90) * Math.PI / 180);


O segredo é saber se atingiu alguma coisa, se atingiu para de mover, por isso não é muito bom ter tantos enterFrame, o código está muito separado. Essa é a única linha que movimenta o carro?

[]s
0

#5 User is offline   Roberto Arruda 

  • Group: Membros
  • Posts: 15
  • Joined: 27-March 08

Posted 30 April 2008 - 07:49 PM

Fala aí Natan.

Sobre o movimento do carro, também temos as ações das setas de direção logo no início da timeline do carro que acredito ser alí o segredo para parar o mesmo. Porque enquanto estou com o dedo sobre a tecla "seta para cima" carro indo para frente, ou "seta para baixo" que é a ré dele, quando ocorre a colisão onde temos a hittest, as ações são obedecidas, ou seja, o carro amassa em ambas posições de setas. O que eu preciso acima disso, é que haja a parada total do carro na colisão quando ocorre o amassamento, é aí que ele não obedece e continua acelerado devido eu estar ainda com o dedo sobre a tecla, mas não explica o motivo de continuar rolando, porque se verificar em qq jogo parecido com o Megaman, mesmo com o dedo na tecla, ocorre a parada diante de um obstáculo. É essa ação que não consigo acrescentar aos códigos existentes. Como já disse, mesmo acrescentando ações como: delete, stop, break, não tem efeito algum.

Valeu.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic


Similar Topics Collapse


Publicidade




2 User(s) are reading this topic
0 membro(s), 2 visitante(s) e 0 membros anônimo(s)