Comunidad de diseño web y desarrollo en internet online

Problema ente dos MovieClips

Citar            
MensajeEscrito el 16 Feb 2006 01:57 pm
Lo que estoy haciendo es lo siguiente:
He dibujado un gusanito y lo he convertido en MovieClip (cuerpo_mc), luego he dibujado en la parte inferior del escenario una superficie irregular y lo he convertido en MovieClip (cesped_mc).
En el frame 1, puse este código:

x = 5;
fuerza = 0.1;
velocidad = 0;
_root.onEnterFrame = function(){
velocidad += fuerza;
cuerpo_mc._y += velocidad;
if(cesped_mc.hitTest(this.cuerpo_mc._x,this.cuerpo_mc._y,true)){
velocidad = 0;
fuerza = 0;
}
if(Key.isDown(Key.RIGHT)){
cuerpo_mc._x += x;
}
if(Key.isDown(Key.LEFT)){
cuerpo_mc._x -= x;
}

}

bueno, el problema es que yo quiero que cuando el gusano se desplaze siga la superfie irregular del MovieClip cesped_mc, porque cuando cuerpo_mc toca con cesped_mc el gusano deja de caer, se detiene. pero cuando lo muevo para la derecha o a la izquierda el cuerpo_mc sigue una línea recta. No contornea la superficie de cesped_mc. [/img][/flash][/list][/code]

Por Emoalex

13 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 16 Feb 2006 03:23 pm

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 17 Feb 2006 02:05 pm
Gracias zah, me sirvió bastante la ayuda. te mando un abrazo.

Por Emoalex

13 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 17 Feb 2006 02:15 pm
Gracias zah, me ha servido bastante. te mando un abrazo.

Por Emoalex

13 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 17 Feb 2006 03:54 pm
ok he modificado el código de la siguiente manera:
x = 3;
fuerza = 1.7;
velocidad = 0;
var choque:Boolean
//
function hit(){
if(cesped_mc.hitTest(this.cuerpo_mc._x,this.cuerpo_mc._y,true)){
choque = true;
}else{
choque = false;
}
return choque;
}
//
_root.onEnterFrame = function(){
hit();
trace(choque);
if (choque == false){
velocidad += fuerza;
cuerpo_mc._y += velocidad;
}else{
fuerza = 1.7;
velocidad = 0;
}
if(Key.isDown(Key.RIGHT)){
cuerpo_mc._x += x;
}
if(Key.isDown(Key.LEFT)){
cuerpo_mc._x -= x;
}

Cuando el gusanito cae y toca la montaña se detiene, y cuando lo muevo hacia la derecha va bajando según el contorno de la montaña, la cuestión es cuando tiene que volver a subir. cuando alcanza la pendiente mínima de la montaña, no suebe sino que sigue esa recta. Les agradecería mucho que me ayudaran.

Por Emoalex

13 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 17 Feb 2006 08:17 pm
Te paso este código, MUY mejorable (acabo de perder buena parte de mi trabajo y no estoy para florituras), pero creo que te aclarará las ideas (para un clip bola y otro cesped, que está debajo. La primera función mejor que la pongas en un .as aparte y esas cosas...

Código :

function checkHit(a, b) {
   with (a) {
      if (b.hitTest(getBounds(_root).xMax, _y, true)) {
         return "left";
      } else if (b.hitTest(getBounds(_root).xMin, _y, true)) {
         return "right";
      } else if (b.hitTest(_x, getBounds(_root).yMax, true)) {
         return "up";
      } else if (b.hitTest(_x, getBounds(_root).yMin, true)) {
         return "down";
      } else {
         return false;
      }
   }
}
fuerza = 5;
bola.onEnterFrame = function() {
   bola._y += fuerza;
   choque = checkHit(this, cesped);
   trace(choque);
   if (choque != false) {
      fuerza = 0;
   } else {
      fuerza = 5;
   }
   if (Key.isDown(Key.RIGHT)) {
      this._x += 5;
      do {
         this._y -= .5;
         choque = checkHit(this, cesped);
      } while (choque != false);
   }
   if (Key.isDown(Key.LEFT)) {
      this._x -= 5;
      do {
         this._y -= .5;
         choque = checkHit(this, cesped);
      } while (choque != false);
   }
};

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 17 Feb 2006 10:13 pm
Gracias zah, sos un maestro. Disculpame si te hice perder parte de tu trabajo. Te mando otro abrazo.

Por Emoalex

13 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 17 Feb 2006 10:35 pm

Emoalex escribió:

Disculpame si te hice perder parte de tu trabajo.

Por supuesto que no :lol: . Lo había perdido por la falta de memoria RAM de mi computadora y mi falta de costumbre para guardar... :cry:

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 18 Feb 2006 02:34 pm
ok, ahora esta el problema de que la bola cuando se muevese levanta y hace pequeños saltitos y cuando vuelve a caer lo hace más abajo de cuando cayó por primera vez. ¿eso se puede arreglar de alguna forma?

Por Emoalex

13 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 18 Feb 2006 02:58 pm
prueba así (cambiado a 36 fps) :wink:

Código :

function checkHit(a, b) {
   with (a) {
      if (b.hitTest(getBounds(_root).xMax, _y, true)) {
         return "left";
      } else if (b.hitTest(getBounds(_root).xMin, _y, true)) {
         return "right";
      } else if (b.hitTest(_x, getBounds(_root).yMax, true)) {
         return "up";
      } else if (b.hitTest(_x, getBounds(_root).yMin, true)) {
         return "down";
      } else {
         return false;
      }
   }
}
fuerza = 2;
bola.onEnterFrame = function() {
   bola._y += fuerza;
   choque = checkHit(this, cesped);
   //trace(choque);
   if (choque != false) {
      fuerza = 0;
      colision = true;
   } else {
      fuerza = 2;
   }
   if (Key.isDown(Key.RIGHT)) {
      this._x += 2;
      choque = checkHit(this, cesped);
      if (colision) {
         do {
            this._y += .5;
            choque = checkHit(this, cesped);
         } while (choque == false);
      }
   }
   if (Key.isDown(Key.LEFT)) {
      this._x -= 2;
      choque = checkHit(this, cesped);
      if (colision) {
         do {
            this._y += .5;
            choque = checkHit(this, cesped);
         } while (choque == false);
      }
   }
   do {
      this._y -= .5;
      choque = checkHit(this, cesped);
   } while (choque != false);
   this._y += .5;
};

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 19 Feb 2006 01:57 am
gracias capo, te mando el tercer abrazo...

Por Emoalex

13 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 06 Nov 2006 02:07 pm
¿como se haria para q la bola saltase en una rampa????

Por cucaracha

16 de clabLevel



 

opera
Citar            
MensajeEscrito el 06 Nov 2006 10:18 pm
Mmm, juega un poco con el código... La verdad es que no lo hice pensando en saltos y resulta difícil adaptarlo. Tendrás que ingeniartelas de otra manera detectar la colisión, y no con un bucle, y para que salte con cierta velocidad deberías darle una aceleración que vaya decreciendo (además de la gravedad claro).
Pd: Si lo consigues, no olvides postear cómo lo hiciste ^^

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 09 Nov 2006 09:29 pm
esk no tngo ni idea d actionscript, vamos..........solo se lo basico..............agradeceria q alguien lo modificase

Por cucaracha

16 de clabLevel



 

opera
Citar            
MensajeEscrito el 09 Nov 2006 09:44 pm

cucaracha escribió:

esk no tngo ni idea d actionscript

entonces podes hacer la animacion con interpolacion de movimiento.

Por Mariux

BOFH

7756 de clabLevel

28 tutoriales
15 articulos

Genero:Femenino   Héroes Editores

Diseñadora & ilustradora

firefox
Citar            
MensajeEscrito el 09 Nov 2006 10:25 pm

Mx escribió:

cucaracha escribió:

esk no tngo ni idea d actionscript

entonces podes hacer la animacion con interpolacion de movimiento.


Creo que "cucaracha" tendría que plantearse aprender AS. Le va a servir en el futuro.

Cucaracha: Igual, para que te vayas dando una idea, acá te posteo un código que hace saltar un MC llamado "clip_mc" al presionar espacio.

Código :

var saltando:Boolean = false;
var cayendo:Boolean = false;
//
var tiempo:Number;
//
var velSalto:Number = 8;
var gravedad:Number = 7;
var tiempoSalto:Numner = 50;
//
var pisoY = Stage.height - 30;
//
clip_mc._y = pisoy;
//
this.onEnterFrame = function () {
//
if (Key.isDown (Key.SPACE)) && !saltando && !cayendo) {
saltando = true;
}
//
if (cayendo) {
clip_mc._y += gravedad;
}
//
if (saltando && !cayendo && tiempo <= tiempoSalto) {
tiempo++;
clip._y -= velSalto;
}
//
if (tiempo > tiempoSalto && !cayendo) {
cayendo = true;
saltando = false;
tiempo = 0;
//
if (cayendo && clip_mc._y >= pisoY) {
clip_mc._y = pisoy;
cayendo = false;
};


Lo hice largo para separar todos los ifs y que sea más entendible (es decir, obvié los else y todo eso para simplificar). Como verás, usa 2 variables, cayendo y saltando y aumenta o disminuye la posición en y del MC dependiendo de si estas se evaluan como true o false. Luego, hay 2 acciones que comienzan el salto (la que tiene el if(Key.isDown....) y lo terminan (la que checkea si el MC se halla por debajo del piso).
La última acción (no por orden de aparición, sino por orden de mención en esta explicación) hace que el MC solo salte por un tiempo determinado.


Probá cambiar los valores y ver como afectan a la animación.

Por favor, tené paciencia si falla, porque lo escribí directamente en el browser y no lo probé. Si tiene algún error (creo que no, pero me puedo equivocar), decime y trato de solucionarlo.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie
Citar            
MensajeEscrito el 09 Nov 2006 10:30 pm
Ay... lo revisé y tiene 2 errores, después de esta línea tiempo = 0; tenés que cerrar el if con un } y también definí una variable como Numner en vez de Number la variable es tiempoSalto. Espero que eso sea todo y perdón por los errores :crap:

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie
Citar            
MensajeEscrito el 10 Nov 2006 04:54 pm
no si saltar si lo se acer, pero lo q no se hacer esq salte en una rampa

Por cucaracha

16 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Nov 2006 04:17 am
No entiendo... qué es lo que no funciona o no podés hacer?

En todo caso, probalo en una película nueva con un solo MC de nombre (de instancia, el de la biblioteca no importa) clip_mc Así, debería funcionarte :wink:

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.