Comunidad de diseño web y desarrollo en internet online

Variar posiciones entre objetos

Citar            
MensajeEscrito el 21 Oct 2014 05:43 pm
Hola!

Tengo 5 objetos en el escenario, y me gustaría que cada vez que se abriera, variara la posición Y entre ellos.
He intentado crear una tabla Array y desordenando, pero sólo me dan errores.

Mirad, tengo esto de código:

var posicionesY:Array=new Array(60,183,306,430,60);
var situado:Array=new Array(false,false,false,false,false);
var i:uint;

var objetos:Array=new Array ;

objetos[0]=new bola1(); // En todos estos mc me da error, dice que llamo a un
objetos[1]=new bola2(); // método posiblemente no definido, y no entiendo
objetos[2]=new bola3(); // porqué, si tienen los mismos nombres de instancia.
objetos[3]=new bola4();
objetos[4]=new bola5();

y luego supongo que tengo que hacer un stage, y decirle que coja un número aleatorio de las posiciones Y del Array, pero no sé como decírselo.

También he probado sin tablas, así:

bola1.y= Math.random()*300+30; //Tampoco me sirve porque se pisan entre ellas,
bola2.y= Math.random()*300+30; // por eso quiero que varien
bola3.y= Math.random()*300+30; // entre sus posiciones.
bola4.y= Math.random()*300+30;
bola5.y= Math.random()*300+30;

¿Hay alguna manera fácil de hacerlo?

Muchas gracias,



Mar

Por Mar_88

16 de clabLevel



Genero:Femenino  

chrome
Citar            
MensajeEscrito el 21 Oct 2014 06:17 pm
Estas instanciando objetos (creandolos), no a la instancia de la clase.... seguramente no tenes una clase en la libreria "bola1"

el codigo debería ser asi... si estas en la linea de tiempo principal ...

Código :

var objetos:Array = [] ;
for( var i:int = 1; i <= 5; ++i ) {
    var bola:DisplayObject = this["bola" + i] ;
    bola.y = Math.random()*300+30;
    objetos.push(this["bola" + i]) ; // aca estas guardando la instancia
}

objetos[1].x = 200 ;

Por rodrigolopezpeker

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Oct 2014 06:26 pm
¡Hola rodrigolopezpeker! ¡Gracias por contestar!

Yo no quiero crear los objetos, ya los tengo en el escenario. Sólo quiero que al iniciar la aplicación, varíen las posiciones Y entre ellos.

Att,


Mar

Por Mar_88

16 de clabLevel



Genero:Femenino  

chrome
Citar            
MensajeEscrito el 21 Oct 2014 06:26 pm
Eso es lo que hace el codigo que te pegue en el post anterior

Por rodrigolopezpeker

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Oct 2014 10:08 pm
¡Hola rodrigolopezpeker!

Gracias, pero no lo entiendo. Ahí hay un Math.random()*300+30; ¿y eso lo hace aleatorio no? lo que yo quiero más bien es lo primero que he planteado, que sería para variar las posiciones. No sé si me explico...
Tengo 5 objetos en estas posiciones: 60,183,306,430,60. Y quiero que varien entre ellas, no que salgan en cualquier lugar del escenario. :(


Gracias igualmente!


Mar

Por Mar_88

16 de clabLevel



Genero:Femenino  

chrome
Citar            
MensajeEscrito el 22 Oct 2014 06:38 am
Te podrías crear un ArrayCollection por ejemplo llamado Posiciones en el que guardas las posiciones de todas las bolas que quieras.

Luego te creas una función de forma que vaya generando seleccionando de forma aleatoria un número entre 0 y el número de elementos que tenga tu arrayCollection Posiciones y dependiendo del número que salga se lo asignas a tu primera bola. Luego eliminas el elemento que haya salido de Posiciones y vuelves a seleccionar otro número aleatorio y así hasta vaciar el ArrayCollection.

No sé si me he explicado...

Por empardopo

71 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Oct 2014 11:16 am
¡Hola empardopo! ¡Gracias por contestar!

Si que te explicas, lo que pasa que no lo entiendo bien. ¿No serviría el Array que he puesto encima?

Éste:

var posicionesY:Array=new Array(60,183,306,430,60);
var situado:Array=new Array(false,false,false,false,false);

No sé que es ArrayCollection, y no he encontrado ejemplos.
Luego, eso de crear una función para que vaya seleccionando de forma aleatoria no sé hacerlo.

Si me puedes echar una mano, te lo agradecería, sino es mucha molestia....
Sino, ¿no podría ser de una forma más fácil? He pensado en hacer varias variables, guardando diferentes ordenes, pero luego tampoco sé como elegir una variable al azar, me estoy haciendo un follón....


Muchas gracias,


Mar

Por Mar_88

16 de clabLevel



Genero:Femenino  

chrome
Citar            
MensajeEscrito el 22 Oct 2014 01:07 pm
ArrayCollection es una clase del framework de Flex que extiende Array... no tenes necesidad de usarlo (yo nunca lo he usado).

Mira, aca te dejo un codigo con comentarios....

Código ActionScript :

var contenedor_mc: MovieClip = this; // aca pone el nombre de instancia del movieclip que contiene las bolas. lo pongo en una variable porque no se donde estan..
         var numBolas: int = 5;
         var bolas_arr: Array = [];
         for ( var i: int = 0; i < numBolas; i++ ) { // loop de 0 a 4.
            var nombreInstancia: String = "bola" + (i + 1); // loop de 1 a 5 - bola1, bola2, bola3, bola4, bola5
            bolas_arr[i] = this[contenedor_mc]
         }

         // - formas de acceder a la bola:
         contenedor_mc.bola1.x = 10;
         // si la bola esta en la linea de tiempo principal y este codigo esta en el mismo lugar.
         bola1.x = 10
         // mc guardado en el array.
         bolas_arr[0].x = 10;


         // -- crea una array de posiciones, considerando que solo guardas un solo valor (y)... no x,y.
         var posiciones_arr: Array = [150, 80, 40, 30, 20, 200];


         // asignar a todas las bolas un valor del array (aleatorio) ...
         // opcion 1: varias bolas pueden terminar en la misma posicion...
         for ( var i: int = 0; i < numBolas; i++ ) {
            var indicePosicion: int = Math.round( Math.random() * (posiciones_arr.length - 1) );
            bolas_arr[i].y = posiciones_arr[indicePosicion] ;
         }

         // opcion 2: creas un array de posiciones "buffer", donde vas eliminando los elementos.
         // para que no se repita el indice.
         var posiciones_buffer:Array = posiciones_arr.concat() ; // clonar el array original.
         for ( var i: int = 0; i < numBolas; i++ ) {
            var indicePosicion: int = Math.round( Math.random() * (posiciones_buffer.length - 1) );
            bolas_arr[i].y = posiciones_buffer[indicePosicion] ;
            // eliminamos el indice del array. como si fuera delete posiciones_buffer[indice].
            posiciones_buffer.splice(indicePosicion, 1) ;
         }



Ahora, si lo que vos queres es que el reordenamiento se ejecute repetidas veces, o cuando se dispare un evento (mouse, keyboard, etc)... te conviene hacer una funcion para que los reordene... continuando el ejemplo de arriba, solo move "opcion2" a una funcion.

Código ActionScript :

// llamando a la funcion
ordenarBolas() ;
         
// codigo de la funcion..
         function ordenarBolas():void {
            // volvemos a copiar las posiciones.
            var posiciones_buffer:Array = posiciones_arr.concat() ; // clonar el array original.
            for ( var i: int = 0; i < numBolas; i++ ) {
               var indicePosicion: int = Math.round( Math.random() * (posiciones_buffer.length - 1) );
               bolas_arr[i].y = posiciones_buffer[indicePosicion] ;
               // eliminamos el indice del array. como si fuera delete posiciones_buffer[indice].
               posiciones_buffer.splice(indicePosicion, 1) ;
            }
         }

// Solo para que lo testes, 
// escuchamos un evento mouseClick del stage y llamamos a la funcion cada vez que se dispare.
stage.addEventListener( MouseEvent.CLICK, onStageClick );
function onStageClick( event:MouseEvent ):void {
     ordenarBolas() ;
}

Por rodrigolopezpeker

61 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Oct 2014 04:30 pm
¡Mil gracias! pero me siguen dando errores.



Mar

Por Mar_88

16 de clabLevel



Genero:Femenino  

chrome
Citar            
MensajeEscrito el 13 Nov 2019 04:54 am

Mar_88 escribió:

Hola!

Tengo 5 objetos en el escenario, y me gustaría que cada vez que se abriera, variara la posición Y entre ellos.
He intentado crear una tabla Array y desordenando, pero sólo me dan errores.

Mirad, tengo esto de código:

var posicionesY:Array=new Array(60,183,306,430,60);
var situado:Array=new Array(false,false,false,false,false);
var i:uint;

var objetos:Array=new Array ;

objetos[0]=new bola1(); // En todos estos mc me da error, dice que llamo a un
objetos[1]=new bola2(); // método posiblemente no definido, y no entiendo
objetos[2]=new bola3(); // porqué, si tienen los mismos nombres de instancia.
objetos[3]=new bola4();
objetos[4]=new bola5();

y luego supongo que tengo que hacer un stage, y decirle que coja un número aleatorio de las posiciones Y del Array, pero no sé como decírselo.

También he probado sin tablas, así:
https://downloadnox.onl/ https://vidmate.vet/ https://vlc.onl/
bola1.y= Math.random()*300+30; //Tampoco me sirve porque se pisan entre ellas,
bola2.y= Math.random()*300+30; // por eso quiero que varien
bola3.y= Math.random()*300+30; // entre sus posiciones.
bola4.y= Math.random()*300+30;
bola5.y= Math.random()*300+30;

¿Hay alguna manera fácil de hacerlo?

Muchas gracias,



Mar
Luego eliminas el elemento que haya salido de Posiciones y vuelves a seleccionar otro número aleatorio y así hasta vaciar el ArrayCollection.

Por jakoritahari

4 de clabLevel



 

chrome

 

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