AS3 Colortransform по нескольким кадрам?
-
25-10-2019 - |
Вопрос
(Flash Professional, AS3)
Я работаю над индивидуальной аватарской системой, где вы можете выбрать различные фестивалы и цвета. Например, у меня есть «волосы», в котором есть 10 причесок. Каждая рама имеет перемещение различной прически (Hairstyle1, Hairstyle2 и т. Д.). У меня также есть цветовой писатель, чтобы изменить цвет.
Вот мой код:
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 - NULL на кадре 2. Почему ??? Я явно назвал Hairstyle2 как «Colorlayer» в кадре 2.
Я думаю, что проблема связана со мной, используя одно и то же имя для разных классов/движений, но я не знаю, как решить проблему ...
Я добавил квадратный Movieclip под моими прическами Moveieclips, названный квадратным «Colorlevel», и удалил имя из моих зажимов для прически. Когда я нажимаю кнопку «Следующая», квадрат правильно поддерживает цвет от кадра до кадра. Тем не менее, наличие квадрата мне не очень хорошо приносит. :(
Я попытался преобразовать слой прически в маску. Делая это, однако, что приводит к еще одной ошибке «нулевого объекта» - mc_myavatar.hair.colorlayer is null после кадра 1. Я даже попробовал «охватить» мой цветовой ветер во всех кадрах (без ключа), думая, что это даст мне только один MoveieClip для работы. Неудачно. Та же ошибка!
Что тут происходит? Почему я получаю эти нулевые объекты, когда они четко определены в моем движении?
Я также открыт для предложений по лучшему способу сделать несколько кадров и цветов.
Решение
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, это не было. Надеюсь это поможет.