Comunidad de diseño web y desarrollo en internet online

Big If

Citar            
MensajeEscrito el 05 Nov 2005 04:23 pm
Tengo dos problemas con if: cuando intento que en cierta condición, una acción pare, solo se para concretamente en esa condicion, intento que se pare a partir de la primera vez que se cumpla esa acción en adelante, ya del todo, pero sólo se para una vez. El segundo problema es basicamente el mismo: pretendo que cada vez que se cumpla cierta condicion una variable aumente en una unidad, pero cuando pongo un trace, resulta que esa variable es siempre 1, porque sigue cumpliéndose sólo una vez. Debe haber algún método que no conozco por ahi, alguna palabra reservada, algo :S Llevo dos dias dándole vueltas, creo que mis conexiones neuronales han entrado en un circulo vicioso y de ahí no salen.

Por jota

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Nov 2005 04:25 pm
si pones los códigos creo que será más fácil ayudarte, no crees? :?


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 05 Nov 2005 05:23 pm
El primero es mas o menos asi:

mc.startDrag();
if (mc.hitTest(mc2)== true){
mc.stopDrag();
}

el stopDrag no funciona, o funciona solo durante un instante tan fugaz que no se nota. El siguiente es:

if (mc.hitTest(mc2) == true){
a= a+1;
}
que siempre da como resultado 1, en lugar de 2,3,4, etc...

Por jota

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Nov 2005 05:41 pm
¿Has probado con un onEnterFrame para que a aumente de constantemente y para que funcione el stopDrag()?

Por jon4

10 de clabLevel



 

_root.bsas_mc.casa_mc

opera
Citar            
MensajeEscrito el 05 Nov 2005 05:53 pm
Sí, lo tengo todo dentro de un onEnterFrame, pero sigue sin funcionar, eso es lo que más me extraña.

Por jota

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Nov 2005 06:01 pm
y donde inicializas a?, no veo la inicialización y esa inicialización parece estar ejecutandonse siempre, debe ser esa la causa del error :wink:


Nota:
Esto

Código :

a=a+1;
tiene su equivalente más corto, que es

Código :

a++;
y tambien otro sería

Código :

a+=1;
aunque este último se utiliza más para acumuladores del tipo

Código :

a+=5;
que seria equivalente

Código :

a=a+5;




saludos :)

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 05 Nov 2005 06:05 pm
Gracias! creo que voya imprimir esta página, es un buen esquema de las posibilidades. Pero creo que al menos la a la inicié, no se si bien porque la inicie antes del if, de hecho tengo dos variables, una a y otra b, cada una inciada en 0.

Por jota

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Nov 2005 06:13 pm
Es que soy bastante nueva en esto y siempre se me olvidan cosas :) pero te aseguro que he probado a poner incluso varios enterFrames dentro de enterFrames a ver si así funcionaba, y las variables están iniciadas a 0.

Por jota

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Nov 2005 07:09 pm
Por que no intentas describir la estructura de los fotogramas donde tienes los códigos de los incrementos e inicialización de la variable a?

a ver si te podemos ayudar mejor :P

saludos :)

PD: no importas que seas nuevo, todos pasamos por eso :wink:

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 05 Nov 2005 07:29 pm
Este es el código completo que tengo, sólo hay dos capas con un fotograma cada una, en una está el mc, y en otra el código.

Código :

onEnterFrame = function(){
   if((_xmouse < 550 && _xmouse > 0){
      mouse = _xmouse - 275;
      _root.mc._x = _root.mc._x + (mouse/12);
        }
} 
col1.onEnterFrame = function(){
   status = _root.mc.hitTest(500, 200, true);
   status2 = _root.mc.hitTest(50, 200, true);
   a=0;
   b=0;
   if (_root.mc.hitTest(col2) == true){
      b= b+1;
   }else if(_root.mc.hitTest(col1)== true){
      a = a +1;
      trace(a);
   }
      
   if(status == true){
      delete onEnterFrame;
      mc.onEnterFrame = function(){
      mouse = _xmouse - 275;
      _root.mc._x = _root.mc._x - (mouse/12);
      }
   }else if(status2 == true){
      delete mc.onEnterFrame;
      mc.onEnterFrame = function(){
         mouse = _xmouse - 275;
         _root.mc._x = _root.mc._x + (mouse/12);
      }
   }
}

Tengo un gran lio aquí, y hay varios problemas sobretodo, pero tengo que ir por partes con cada uno e ir de lo mas sencillo a lo más complejo, porque no sé ni lo que es un coseno, ni pi ni nada. La intencion de este código es hacer que el mc al principio fuera hacia donde el ratón, luego una vez llegara a col2 fuera a la inversa, y/o cuando llegara a col1 que está a la izquierda, fuera otra vez a la derecha, dejando de ejecutarse el primer onenterframe. Es curioso que si cambio el nombre de mc.onEnterFrame, cualquiera de los dos, esto deja de funcionar y hace cosas raras. De todas formas tal y como está lo que hace es que cuando el raton va a la de4recha todo ok, pero si el raton va hacia la izquierda, el mc si está a la derecha sale atravesando col2 hacia la derecha, y si el mc esta en la izquierda sale por la izquierda atravesando col1. Creo que lo que sucede es que los deletes anulan el propio enterframe en el que están, no estoy segura. Por eso intenté hacer primero un start drag en lugar de el primer enterframe, pero el stopdrag dentro de un if, no funcionaba. Luego intenté poner una variable dentro de un if hitTest, para que según esa variable se ejecutara un codigo u otro, pero no he podido seguir elaborando y probando esto porque la variable sencillamente no funciona, sigue siendo 1 todo el rato. Se que esto no esta muy bien explicado, pero es la forma que sé. :)

[moderador]Agregadas etiquetas code, para mejor lectura[/moderador]

Por jota

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Nov 2005 07:38 pm

Código :

a=0;
   b=0;
   if (_root.mc.hitTest(col2) == true){
      b= b+1;
   }else if(_root.mc.hitTest(col1)== true){
      a = a +1;
      trace(a);
   }


esto es a lo que me referia exactamente, a y b se esta inicializando siempre y por eso siempre es uno o cero :P intenta hacer esa inicialización fuera, por ejemplo asi:

extracto de código, ligeramente modificado escribió:


a=0;
b=0;
onEnterFrame = function(){
if((_xmouse < 550 && _xmouse > 0){
mouse = _xmouse - 275;
_root.mc._x = _root.mc._x + (mouse/12);
}
}
col1.onEnterFrame = function(){
status = _root.mc.hitTest(500, 200, true);
status2 = _root.mc.hitTest(50, 200, true);


ahora con respecto a lo de onEnterFrame, no hagas delete, intenta esto:

Código :

mc.onEnterFrame= null;


saludos :)

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 05 Nov 2005 07:55 pm
Ok voy a probarlo ahora mismo! muchas gracias :)

Por jota

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Nov 2005 08:00 pm
Va de maravilla, ahora funciona la variable. Por último, sigo teniendo el problema de que el mc cruza col1 y col2 (dos clips que son solo unas lineas de límite), creo que es un bucle que se auto elimina, cosa mas rara :)

Por jota

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Nov 2005 08:13 pm
Prueba este código, solo copialo y pegalo en un fotograma de un nuevo .fla :P

Código :

var colIzq:MovieClip = this.createEmptyMovieClip("colIzq",this.getNextHighestDepth());
var colDer:MovieClip = this.createEmptyMovieClip("colDer",this.getNextHighestDepth());
var colPri:MovieClip = this.createEmptyMovieClip("colPri",this.getNextHighestDepth());

function rectangulo (x:Number, y:Number, ancho:Number, alto:Number, color:Number, alpha:Number, quien:MovieClip){
   var auxMc:MovieClip = quien;
   with(auxMc){
      _x=x;
      _y=y;
      moveTo(0,0);
      beginFill(color,alpha);
      lineTo(0,alto);
      lineTo(ancho,alto);
      lineTo(ancho,0);
      endFill();
   }
}
rectangulo(10,10, 50, 50, 0xCCCCCC, 100, colIzq);
rectangulo(300,10, 50, 50, 0xCCCCCC, 100, colDer);
rectangulo(150,20, 50, 30, 0x333333, 100, colPri);
var mouseListener:Object = new Object();
mouseListener.onMouseMove = function (){
   if (_xmouse<colIzq._x){
      colPri._x= colIzq._x +colIzq._width+1;
   } else if (_xmouse>colDer._x+colDer._width){
      colPri._x=    colDer._x -colPri._width-1;
   } else{
      colPri._x= _xmouse;
   }
   if (colPri.hitTest(colIzq)){
      colPri._x= colIzq._x+colIzq._width+1;
   }
   if (colPri.hitTest(colDer)){
      colPri._x=    colDer._x-colPri._width-1;
   }
}
Mouse.addListener(mouseListener);
stop();

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 05 Nov 2005 09:35 pm
Aquí hay un monton de código con ideas nuevas (nuevas al menos para mi), gracias. Aunque la idea que prentendia era hacer que el cuadrado diera vueltas solo como si fuera en 3d, osea, da vueltas en x sólo, según la dirección del raton, osea que si el raton esta a la derecha el raton va a la izquierda luego a la derecha y luego a la izquiereda, y si esta el raton a la izquierda viceversa, con un pequeño (creo que se llama) easing. He probado a hacerlo con animacion pero me daba algunos problemas, por eso intenté el código. Anyway, aqui hay muchas cositas que me vendrán bien para futuros proyectos :)

Por jota

48 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Nov 2005 11:35 pm
Ah pero no me exijas mucho :lol: , lo hice en 5 mins, y no lo habias mencionado.
errghh[nota mental] no lo voy hacer, no lo voy hacer, tengo cosas que hacer[/nota mental]


Bueno al menos te di ideas :P

por cierto sobre esto:

jota escribió:

Por último, sigo teniendo el problema de que el mc cruza col1 y col2 (dos clips que son solo unas lineas de límite), creo que es un bucle que se auto elimina, cosa mas rara


por eso puse estas lineas en mi código

Código :

if (_xmouse<colIzq._x){
      colPri._x= colIzq._x +colIzq._width+1;
   } else if (_xmouse>colDer._x+colDer._width){
      colPri._x=    colDer._x -colPri._width-1;
   } else{
      colPri._x= _xmouse;
   } 


Porque se me pasaba el colPri a los lados que los movieclips colIzq y colDer :S , bueno revisar la ayuda de Flash sobre lo que no entiendas en mi código(las funciones y propiedades que no entiendas) no estaría demás :wink: .

saludos :)

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 06 Nov 2005 08:59 am
Ok muchas gracias, en realidad deberia haber seguido por mi cuenta una vez resueltas esas dos dudas, pero ya que estaba... :) jeje

Por jota

48 de clabLevel



 

msie

 

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