nOobCrafter
09.02.2009, 18:54
Задача, плавно нарисовать Н-цать линий, одна за другой. Пытаюсь это сделать вот так:
var i:Number = 1;
function createLine()
{
if (i < 12)
{
var control = this.attachMovie("control_mc", "c"+i+"_mc", i);
var number = this.attachMovie("num", "num" + i, i + 100);
number.num.text = i;
number._x = control._x = Math.random() * 800;
number._y = control._y = Math.random() * 800;
this.next_x = this["c" + i + "_mc"]._x;
this.next_y = this["c" + i + "_mc"]._y;
this.this_x = this["c" + (i - 1) + "_mc"]._x;
this.this_y = this["c" + (i - 1) + "_mc"]._y;
control.onRelease = function()
{
trace(this)
}
this.createEmptyMovieClip("line"+i, 20 + i);
if (this.nextPoint_x == underfined)
{
this.nextPoint_x = this["c" + (i - 1) + "_mc"]._x;
this.nextPoint_y = this["c" + (i - 1) + "_mc"]._y;
this.lineStyle(2, 0x000000, 100);
}
this.moveTo(this["c" + (i - 1) + "_mc"]._x, this["c" + (i - 1) + "_mc"]._y);
this.onEnterFrame = lineMover;
}
}
// функция для onEnterFrame линии
function lineMover()
{
this.lineTo(this.nextPoint_x, this.nextPoint_y);
this.nextPoint_x += (this.next_x - this.this_x) / 200; // вот тут вычисляем на сколько мы рисуем линию за кадр
this.nextPoint_y += (this.next_y - this.this_y) / 200; //
if ((this.next_x - this.this_x) > 0)
{
if (this.nextPoint_x > this.next_x) // когда мы дорисовали до конечной точки, то прекращаем рисование, умеличиваем счетчик и распологаем новую точку и рисуем к ней линию
{
delete this.onEnterFrame;
i++
createLine()
}
} else {
if (this.nextPoint_x < this.next_x) // когда мы дорисовали до конечной точки, то прекращаем рисование, умеличиваем счетчик и распологаем новую точку и рисуем к ней линию
{
delete this.onEnterFrame;
i++
createLine()
}
}
}
createLine()
Проблема в том что имеем непонятную погрешность (отклонении нарисованной линии от конечной точки) причем чем больше величина на которую рисуется линия тем больше погрешность, такое чувство что каждый раз рисуется один лишнй кусочек.
З.Ы. начинается с 1, потому что начальная точка 0, уже лежит на сцене и имеет заданные координаты.
var i:Number = 1;
function createLine()
{
if (i < 12)
{
var control = this.attachMovie("control_mc", "c"+i+"_mc", i);
var number = this.attachMovie("num", "num" + i, i + 100);
number.num.text = i;
number._x = control._x = Math.random() * 800;
number._y = control._y = Math.random() * 800;
this.next_x = this["c" + i + "_mc"]._x;
this.next_y = this["c" + i + "_mc"]._y;
this.this_x = this["c" + (i - 1) + "_mc"]._x;
this.this_y = this["c" + (i - 1) + "_mc"]._y;
control.onRelease = function()
{
trace(this)
}
this.createEmptyMovieClip("line"+i, 20 + i);
if (this.nextPoint_x == underfined)
{
this.nextPoint_x = this["c" + (i - 1) + "_mc"]._x;
this.nextPoint_y = this["c" + (i - 1) + "_mc"]._y;
this.lineStyle(2, 0x000000, 100);
}
this.moveTo(this["c" + (i - 1) + "_mc"]._x, this["c" + (i - 1) + "_mc"]._y);
this.onEnterFrame = lineMover;
}
}
// функция для onEnterFrame линии
function lineMover()
{
this.lineTo(this.nextPoint_x, this.nextPoint_y);
this.nextPoint_x += (this.next_x - this.this_x) / 200; // вот тут вычисляем на сколько мы рисуем линию за кадр
this.nextPoint_y += (this.next_y - this.this_y) / 200; //
if ((this.next_x - this.this_x) > 0)
{
if (this.nextPoint_x > this.next_x) // когда мы дорисовали до конечной точки, то прекращаем рисование, умеличиваем счетчик и распологаем новую точку и рисуем к ней линию
{
delete this.onEnterFrame;
i++
createLine()
}
} else {
if (this.nextPoint_x < this.next_x) // когда мы дорисовали до конечной точки, то прекращаем рисование, умеличиваем счетчик и распологаем новую точку и рисуем к ней линию
{
delete this.onEnterFrame;
i++
createLine()
}
}
}
createLine()
Проблема в том что имеем непонятную погрешность (отклонении нарисованной линии от конечной точки) причем чем больше величина на которую рисуется линия тем больше погрешность, такое чувство что каждый раз рисуется один лишнй кусочек.
З.Ы. начинается с 1, потому что начальная точка 0, уже лежит на сцене и имеет заданные координаты.