es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Confundido/a acerca de las instancias automáticas y el movimiento de sprites en AS3.

Creé un gran Sprite llamado Space y un gran número de sprites más pequeños y los mantengo en un array llamado Cells.

Pregunta 1.
Cuando rastreo los nombres de los Cells (como Cells[i].name), muestra ‘instance’ y números pares como 2, 4, 6, …
Cuando rastreo los nombres de los hijos de Space (utilizando for (…Space.numChildren; i++){trace(Space.getChildAt(i).name)}, muestra números impares como ‘instance1’, ‘instance3’, ‘instance5’, …

La pregunta es por qué hay dos conjuntos de sprites diferentes y con cuál de ellos debo trabajar más adelante: cambiar coordenadas, colores, etc. ¿Cómo están relacionados los dos conjuntos entre sí?

Pregunta 2.
Ambos conjuntos muestran las coordenadas x e y de todas las celdas establecidas en 0, aunque cuando las creé, les di diferentes valores y las veo colocadas correctamente en la pantalla.
Cuando muevo (con el mouse) una de las celdas, quiero mover de la misma manera a todo el grupo de celdas sin cambiar las ubicaciones relativas entre ellas. Solo puedo hacerlo con el segundo conjunto de instancias, pero de una manera extraña. No establezco nuevas coordenadas como uno esperaría (c.x += dx; c.y +=dy), sino c.x =dx; c.y = dy; Necesito una aclaración al respecto.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Respuesta:

    Pregunta 1:

    La razón por la que hay dos conjuntos diferentes de sprites es que cuando creas un Sprite y lo agregas a otro Sprite como su hijo, ActionScript crea una instancia del Sprite hijo. Esta instancia tiene un nombre, que es “instancia” seguido de un número. Los números impares que ves cuando rastreas los nombres de los hijos de Space son los nombres de las instancias de los sprites más pequeños. Los números pares que ves cuando rastreas los nombres de las Cells son los números de índice del arreglo Cells.

    Para cambiar las propiedades de los sprites más pequeños, necesitas trabajar con las instancias de los sprites, que son los hijos de Space. Si cambias las propiedades de las Cells en el arreglo, no afectará a las instancias que se muestran en la pantalla.

    Pregunta 2:

    La razón por la que las coordenadas x e y de todas las celdas aparecen como 0 es que es posible que estés rastreando las propiedades del arreglo Cells en lugar de las instancias de los sprites más pequeños. Para obtener las coordenadas x e y de las instancias, necesitas rastrear Space.getChildAt(i).x y Space.getChildAt(i).y en lugar de Cells[i].x y Cells[i].y.

    Para mover todas las celdas juntas sin cambiar sus posiciones relativas, necesitas calcular la diferencia en las coordenadas x e y del movimiento del ratón (dx y dy) y sumarlas a las coordenadas x e y iniciales de cada celda. Entonces, la forma correcta de mover las celdas sería:

    for (var i:int = 0; i < Cells.length; i++) {
      var c:Sprite = Space.getChildAt(i) as Sprite;
      c.x += dx;
      c.y += dy;
    }
    

    Esto moverá cada celda en la misma cantidad, sin cambiar sus posiciones relativas.

    ¡Espero que eso ayude!

Comments are closed.