![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2002
Сообщений: 202
|
Приветствую
У меня вопрос, который задавался уже часто Стоит Flash8 есть некий контур, нужно создать анимацию как будто его рисуют карандашем как это сделать просто и элегантно? я сделал так: 1) разбил контур на линии 2) для каждой линии сделал маску 3) двигаю маски var start_timer = getTimer(); var time_array = new Array(/*элементы*/)); var oldx_array = new Array(/*элементы*/); var newx_array = new Array(/*элементы*/)); var oldy_array = new Array(/*элементы*/)); var newy_array = new Array(/*элементы*/)); this.onEnterFrame = function() { var current_timer = getTimer(); var time = current_timer - start_timer; var delta_coeff; for (var id = 0; id < oldx_array.length - 1; ++ id) { if ((time >= time_array[id]) && (time < time_array[id + 1])) { delta_coeff = (time - time_array[id]) / (time_array[id + 1] - time_array[id]); this["mask" + (id + 1)]._x = oldx_array[id] + delta_coeff * (newx_array[id] - oldx_array[id]); this["mask" + (id + 1)]._y = oldy_array[id] + delta_coeff * (newy_array[id] - oldy_array[id]); } } } но тут несколько минусов 1) какие-то проблемы с координатами масок (это правится если каждая маска - то не поворот и растяжение общей, а уникальный символ) 2) почему-то не маскируется когда двигается несколько символов на одном слое 3) самое главное!!! Когда много линий - слишком муторно и тяжело это делать как сделать быстрее, ведь должны быть методы |
|
|||||
|
Регистрация: Dec 2005
Сообщений: 316
|
если участки прямолинейные, то загони контрольный точки в массив и используй clip_mc.lineTo(x,y)
|
|
|||||
|
Регистрация: Sep 2002
Сообщений: 202
|
Так это линия появится сразу а мне надо чтобы рисовалось медленно - как будто карандашем по бумаге ведут
и кроме того участки многие не прямые |
|
|||||
|
Регистрация: Dec 2005
Сообщений: 316
|
я последний ра рисовал по точкам. плавность достигается примерно так
this.createEmptyMovieClip("line_mc", 100);
line_mc.lineStyle(6, 0x553300, 100);
var start_x:Number = 50;
var start_y:Number = 100;
var addz:Number = 1;
var start_l:Boolean = false;
line_mc.moveTo(start_x, start_y);
_root.onEnterFrame = function() {
if (start_x+addz*5<=300) {
var delta_y:Number = 1-Math.random()*2;
line_mc.lineTo(start_x+addz*5, start_y+delta_y);
addz++;
start_l = true;
} else {
//
}
};
|
|
|||||
|
Так ты разбей свою линию на маленькие и рисуй их в сетИнтервале.
__________________
Давайте отбросим факты, чтобы увидеть суть |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|