2013-08-23 2 views
0

У меня есть анимация огненного шара. У меня есть выбор либо с использованием растровых изображений (предпочтительнее, так как он делает мой swf немного более плавным) или с использованием большой группы объектов (10-20 разных рисунков). Я сделал это с помощью инструмента Deco Tool, и это выглядит потрясающе!Изменение цвета в сложной анимации из растровых изображений/группы

Во всяком случае, это очень раздражает, чтобы создать новый. Плюс, когда я пытался сделать новый, он выглядел не так хорошо, как мой первый. Я планирую сделать несколько разных цветов огненных шаров. Было бы очень приятно, если бы я мог каким-то образом отфильтровать цвета всего символа fireball1, но я изо всех сил стараюсь это сделать.

Я пробовал следующий код, но по какой-то причине он просто заставлял мои огненные шары полностью исчезнуть. Я могу запутаться, потому что добавляю все эти новые дочерние элементы моего класса Fireball1 в свои массивы. Кроме того, вот ссылка на изображение моей временной шкалы, я думаю, это может помочь понять, как выглядит мой огненный шар http://tinypic.com/view.php?pic=fd7oyh&s=5.

private var fireball1:Fireball1; 
private var gameTimer:Timer; 
private var army1:Array; //included the arrays in case it effects it somehow 
private var colorFilter:ColorMatrixFilter = new ColorMatrixFilter(colorMatrix); 
private var colorMatrix:Array = new Array(
     [[0, 0, 1, 0, 0], 
     [0, 1, 0, 0, 0], 
     [1, 0, 0, 0, 0], 
     [0, 0, 0, 1, 0]]); 

public function PlayScreen(){ 
    army1 = new Array(); 
    var newFireball1 = new Fireball1(-100, 0); 
    army1.push(newFireball1); 
    addChild(newFireball1); 

    gameTimer = new Timer(50); 
    gameTimer.start(); 
    addEventListener(TimerEvent.TIMER, onTick) 
} 

public function onTick():void 
{ 
    var newFireball1:Fireball1 = new Fireball1(randomX, -15); 
newFireball1.filters = [colorFilter]; 
    army1.push(newFireball1); 
addChild(newFireball1); 
} 

ответ

1

Вам нужно определить матрицу array перед тем, как создать экземпляр объекта ColorMatrixFilter. Кроме того, ColorMatrixFilter ожидает один размер array. См. documentation, который рекомендует использовать синтаксис с использованием concat, который, похоже, делает трюк.

Попробуйте обновить свой код следующим образом:

// Matrix should be a one dimensional array 
var colorMatrix:Array = new Array(); 
colorMatrix = colorMatrix.concat([0, 0, 1, 0, 0]), 
colorMatrix = colorMatrix.concat([0, 1, 0, 0, 0]), 
colorMatrix = colorMatrix.concat([1, 0, 0, 0, 0]), 
colorMatrix = colorMatrix.concat([0, 0, 0, 1, 0]); 

// Matrix needs to be defined before it's added to the ColorMatrixFilter 
var colorFilter:ColorMatrixFilter = new ColorMatrixFilter(colorMatrix); 
+0

Благодаря это сработало! Сохраняет мне столько времени и проблем =)))) +1 – spaderdabomb

Смежные вопросы