AS3 colorTransform для нескольких кадров? - PullRequest
0 голосов
/ 30 ноября 2011

(Flash Professional, AS3)

Я работаю над собственной системой аватаров, в которой вы можете выбирать различные жесты и цвета. Например, у меня есть мувиклип «Волосы», который имеет 10 причесок. Каждый кадр имеет мувиклип с разной прической (HairStyle1, HairStyle2 и т. Д.). У меня также есть ColorPicker, чтобы изменить цвет.

Вот мой код:

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

Это правильно меняет исходный цвет. У меня есть кнопка «nextHair», чтобы переместить mc_myAvatar.hair к следующему кадру. Когда я нажимаю кнопку, я получаю сообщение об ошибке, в котором говорится, что у меня нулевая ссылка на объект. Я добавил след, и mc_myAvatar.hair.colorLayer является нулевым на кадре 2. Почему ??? Я четко назвал HairStyle2 как «colorLayer» в кадре 2.

Я думаю, что проблема связана со мной, использующим одно и то же имя для разных классов / видеоклипов, но я не знаю, как решить проблему ...

Я добавил квадратный видеоклип под видеоклипами hairStyle, назвал его квадратным «colorLevel» и удалил имя из моих клипов hairStyle. Когда я нажимаю следующую кнопку, квадрат правильно сохраняет цвет от кадра к кадру. Однако наличие квадрата не очень мне помогает. (

Я попытался преобразовать слой hairStyle в маску. Однако это приводит к еще одной ошибке «нулевого объекта» - mc_myAvatar.hair.colorLayer является нулевым после кадра 1. Я даже пытался «охватить» свой colorLevel по всем кадрам (без ключевых кадров), думая, что это даст мне только один мувиклип для работы. Неудачно. Та же ошибка!

Что здесь происходит? Почему я получаю эти нулевые объекты, когда они четко определены в моем мувиклипе?

Я также открыт для предложений о лучшем способе сделать несколько кадров и цветов.

1 Ответ

1 голос
/ 30 ноября 2011
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);
}

Я проверял это, content.products имеет значение null в miClick, однако в hdExitFrame этого не было.Надеюсь, это поможет.

...