Pregunta

(Flash Professional, AS3)

Estoy trabajando en un sistema de avatar personalizado donde puede seleccionar varias festuras y colores. Por ejemplo, tengo un movimiento de "cabello" que tiene 10 peinados. Cada cuadro tiene un movimiento de un peinado diferente (peinado1, peinado2, etc.). También tengo un sello de colores para cambiar el color.

Aquí está mi código:

var hairColor:ColorTransform;
hairColor = mc_myAvatar.hair.colorLayer.transform.colorTransform; 
hairColor.color = 0xCCCC00; 
mc_myAvatar.hair.colorLayer.transform.colorTransform = hairColor;

Esto cambia correctamente el color inicial. Tengo un botón "Nexthair" para avanzar mc_myavatar.hair al siguiente cuadro. Cuando hago clic en el botón, recibo un mensaje de error que dice que tengo una referencia de objeto nulo. Agregué un rastro, y mc_myavatar.hair.colorlayer es nulo en el cuadro 2. ¿Por qué? Claramente he nombrado Hairstyle2 como "Colorlayer" en el Frame 2.

Creo que el problema está relacionado conmigo usando el mismo nombre para diferentes clases/movieclips, pero no sé cómo solucionar el problema ...

Agregué un Movieclip cuadrado debajo de mis movieclips de peinado, llamado el cuadrado "Colorlevel", y eliminé el nombre de mis clips de peinado. Cuando hago clic en el botón Siguiente, el cuadrado mantiene correctamente el color desde el marco hasta el marco. Sin embargo, tener un cuadrado no me hace mucho bien. :(

Intenté convertir la capa de peinado en una máscara. Hacer esto, sin embargo, da como resultado otro error de "objeto nulo": mc_myavatar.hair.colorlayer es nulo después del cuadro 1. Incluso intenté "abarcar" mi nivel de color en todos los cuadros (sin cuadros clave), pensando que esto me daría solo uno Movieclip para trabajar. Sin suerte. ¡Mismo error!

¿Que está pasando aqui? ¿Por qué estoy obteniendo estos objetos nulos, cuando están claramente definidos en mi movieclip?

También estoy abierto a sugerencias de una mejor manera de hacer múltiples marcos y colores.

¿Fue útil?

Solución

function miClick(e:MouseEvent) {
    content.gotoAndStop(e.currentTarget.parent.name);

    if(e.currentTarget.parent.name == "2") {
        content.addEventListener(Event.EXIT_FRAME, this.hdExitFrame);
        productMenu.alpha = 1;
        trace(content.products);
    } else {
        productMenu.alpha = 0;
    }
}

function hdExitFrame(e:Event) {
    trace(e.target.currentFrame + ", " + e.target.products);
    content.removeEventListener(Event.EXIT_FRAME, this.hdExitFrame);
}

He probado esto, content.products es nulo en miclick, sin embargo, en hdexitframe, no lo fue. Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top