Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Рисование траектории 2 (линии) (http://www.flasher.ru/forum/showthread.php?t=103188)

Disney75 31.10.2007 13:53

Рисование траектории 2 (линии)
 
В общем у меня такая проблема... у меня карта местности... и нужно сделать чтобы маршрут рисовался линиями... (линии прямые) Т.е. это даже не маршрут а просто соединение двух точек на карте...(выходил из одной и попадал в другую...) использование маски... не очень подходит...(
на одной из тем форума: http://www.flasher.ru/forum/showthread.php?t=80776
iNils выкладывал 2 примера... они в принципе ничего... но только если анимация на белом фоне... а если фоном является картинка? Не получается...((
Как мне решить эту задачку с наименьшими потерями? :eek:

Ostgur 31.10.2007 14:17

Цитата:

Как мне решить эту задачку с наименьшими потерями?
заплатить за эту работу кому-нибудь :D Выигрыш во времени, если у тебя "время == деньги".
В принципе, используй line, зачем тут БитмапДата:
Код:

this.createEmptyMovieClip("triangle_mc", this.getNextHighestDepth());
triangle_mc.lineStyle(5, 0xff00ff, 100, true, "none", "round", "miter", 1);
triangle_mc.moveTo(200, 200);
onEnterFrame = function(){
triangle_mc.lineTo(_xmouse, _ymouse);
}

или :D
Код:

this.createEmptyMovieClip("triangle_mc", this.getNextHighestDepth());

triangle_mc.moveTo(200, 200);
onEnterFrame = function(){
        _mcolor = "0x"+random(9999).toString(16);
triangle_mc.lineStyle(5, _mcolor, 100, true, "none", "round", "miter", 1);
triangle_mc.lineTo(random(Stage.width*0.5)+Stage.width*0.3, random(Stage.height*0.5)+Stage.height*0.2);
}


Disney75 31.10.2007 16:58

[quote=Ostgur]заплатить за эту работу кому-нибудь :D Выигрыш во времени, если у тебя "время == деньги".
В принципе, используй line, зачем тут БитмапДата:

:wacko: моя твоя не понимать
Использовал и LineTo и MoveTo... в этом случае линия рисуется сразу же, а мне нужно, чтобы она из одной точки выходила и в другую попадала (наглядно)... двигаться то я ее научил... с определенным шагом меняем координаты... Не могу сделать чтобы она в нужные мне координаты попадала...((

Ostgur 31.10.2007 17:06

что не понятно?
Код:

//x1 - Начальная координата по оси абсцисс;
//y1 - начальная координата по оси ординат;
//x2 - Конечная координата по оси абсцисс;
//y2 - Конечная координата по оси ординат;
moveTo(x1, y1);
lineTo(x2, y2);


Disney75 31.10.2007 17:11

Извини конечно, я за Flash сел буквально вчера...)
Может не то что-то говорю...

//x1 - Начальная координата по оси абсцисс;
//y1 - начальная координата по оси ординат;
//x2 - Конечная координата по оси абсцисс;
//y2 - Конечная координата по оси ординат;
moveTo(x1, y1);
lineTo(x2, y2);

это понятно... но в этом случае линия сразу нарисованная получается...( Еще раз прошу прощения... за свое незнание...

Ostgur 31.10.2007 17:27

Код:

function drawLine(x1,y1,x2,y2){
this.lineStyle(5, 0xff00ff, 100, true, "none", "round", "miter", 1);
this.moveTo(x1, y1);
this.lineTo(x2, y2);
}
this.createEmptyMovieClip("my_draw", 0);
var a = 0;
my_draw.onEnterFrame = function(){
if(a == 1){drawLine(100,100, 110, 115);};
if(a == 5){drawLine(110,115, 125, 120);};
if(a == 10){drawLine(125,120, 144, 140);};
if(a == 15){drawLine(144,140, 150, 170);};
if(a == 20){drawLine(150,170, 160, 130);};
if(a == 25){drawLine(160,130, 160, 160);}; //и т.д.
a++;
}


Fl00r 31.10.2007 18:20

Код:

function draw(what,x0,y0,x,y,k)
{
  if(f>=1/k) clearInterval(myInt); else { x*=k*f; y*=k*f; }
  what.clear();
  what.lineStyle (1, 0x990000);
  what.moveTo(x0, y0);
  what.lineTo(x,y);
  f++;
}
f=1; k = interval/time/1000;
this.createEmptyMovieClip("line",0);
myInt = setInterval(draw, interval, x0,y0,x,y);

Ну и задаешь координаты и параметры анимаии:
Код:

interval = 20; //длительность элементарного акта анимации, миллисекунды
time = 1; // длительность всей анимации, секунды
x0 = 0; // начальные координаты по оси x;
y0 = 0;
x = 500; // конечные координаты
y = 500;


udaaff 31.10.2007 20:28

to Ostgur, оригинальное решение =) А если до 100000 надо будет дойти? Даже если такой алгоритм использовать вдруг придется, так как условия взаимоисключающие, то их надо связывать if... else if... else if..., чтобы уменьшить количество проверок или case использовать.

Ostgur 31.10.2007 20:50

udaaff, если 100000 надо будет, то я бы использовал исходник iNils'а
но так как Disney75'y этот вариант не понравился — я предложил своё решение :D

Fl00r 31.10.2007 21:48

Мммм. Она ломанная должна быть...
Тогда так будет проще всего
Код:

function draw (what,x0,y0,x,y)
{
        if (f > 1/k) return nextXY(); else { x = (x-x0)*k*f; y = (y-y0)*k*f; }
        what.clear();
        what.lineStyle(1, 0x990000);
        what.moveTo(x0,y0);
        what.lineTo(x0+x,y0+y);
        f++;
}
function nextXY()
{
        pos +=2;
        ho = this.createEmptyMovieClip("line"+pos, pos);
        clearInterval(myInt);
        if(pos < xy.length)
        {
                myInt = setInterval(draw, interval, ho, xy[pos-2], xy[pos-1], xy[pos], xy[pos+1]);
        }
        f=1;
}
pos = 0; f = 1;        k = interval/time/1000;
nextXY();

ну и сами данные, которыми можно играться.
Массив с координатами может быть сколь угодно велик. Координаты вносятся попарно x,y
Код:

interval = 20; // интервал, в милисекундах
time = 1; // длительность анимации, в секундах
xy = [0, 0,      //начальное положение
          150, 0,
          150, 150,
          0, 150,
          0,0        //конечное положение
          ];



Часовой пояс GMT +4, время: 16:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.