Проблемка такая...
Нужно, чтобы из 4-х палок собирался прямоугольник, у которого можно поменять высоту, длинну и все такое. Причем сделать все программно, да и к тому же кол-во таких прямоугольников тоже можно поменять.
С одним у меня получилось:

Код:
x0 = 512;
y0 = 384;
l = 300;
h = 100;
speed = 5;
mn = 2;
p = 0.01;
k = 0.1;
_root.createEmptyMovieClip("verhgor_mc", -10);
_root.createEmptyMovieClip("pravver_mc", -9);
_root.createEmptyMovieClip("nizgor_mc", -8);
_root.createEmptyMovieClip("levver_mc", -7);
var speedtest = speed;
with (verhgor_mc) {
lineStyle(3, 0xff0000, 100);
moveTo(x0*mn, y0-h/2);
lineTo(x0*mn+l, y0-h/2);
}
with (nizgor_mc) {
lineStyle(3, 0xff0000, 100);
moveTo(0, y0+h/2);
lineTo(-l, y0+h/2);
}
with (pravver_mc) {
lineStyle(3, 0xff0000, 100);
moveTo(x0+l/2, 0);
lineTo(x0+l/2, -h);
}
with (levver_mc) {
lineStyle(3, 0xff0000, 100);
moveTo(x0-l/2, y0*mn);
lineTo(x0-l/2, y0*mn+h);
}
rastverh = _root.verhgor_mc._x-(x0+l/2);
rastniz = _root.nizgor_mc._x+(x0+l/2);
onEnterFrame = function () {
speed = speedtest;
if (_root.verhgor_mc._x == -(x0+l/2)) {
speed = 0;
} else {
p += 0.005;
k += 0.05;
n = ((_root.verhgor_mc._x-x0)*10/rastverh)*k;
if ((_root.verhgor_mc._x-speed*n)<=-(x0+l/2)) {
_root.verhgor_mc._x = -(x0+l/2);
} else {
_root.verhgor_mc._x -= speed*n;
updateAfterEvent();
}
}
speed = speedtest;
if (_root.nizgor_mc._x == x0+l/2) {
speed = 0;
} else {
if ((_root.nizgor_mc._x+speed*n)>=(x0+l/2)) {
_root.nizgor_mc._x = x0+l/2;
} else {
_root.nizgor_mc._x += speed*n;
updateAfterEvent();
}
}
speed = speedtest;
if (_root.pravver_mc._y == y0+h/2) {
speed = 0;
} else {
if ((_root.pravver_mc._y+speed*n)>=y0+h/2) {
_root.pravver_mc._y = y0+h/2;
} else {
_root.pravver_mc._y += speed*n;
}
}
speed = speedtest;
if (_root.levver_mc._y == -(y0+h/2)) {
speed = 0;
} else {
if ((_root.levver_mc._y-speed*n)<=-(y0+h/2)) {
_root.levver_mc._y = -(y0+h/2);
} else {
_root.levver_mc._y -= speed*n;
}
}
};
(достаточно просто перекопировать во флеш)
А вот со множеством ничего не получается, они рисуются, но не перемещаются:

Код:
x0 = 512;
y0 = 384;
//Начальные координаты центра, гдо должен стоять в последствии прямоугольник
l = 300;
//Длинна прямоугольника
h = 100;
//Высота прямоугольника
speed = 5;
// Скорость перемещения
p = 0.01;
//Что-то вроде ускорения усорения
k = 0.1;
//Что-то вроде ускорения
w = 1;
//Кол-во прямоугольников
//Эта операция нужна, чтобы скорость раньше времени не анулировалась. У нас много палок, но одна скорость
var speedtest = speed;
//Т.к. прямоугольникоа должно быть определенное кол-во, то идем в цикл:
for (var o = 0; o<w; o++) {
//Создаем м.к. с палками
_root.createEmptyMovieClip("verhgor"+o+"_mc", o*4-4);
_root.createEmptyMovieClip("pravver"+o+"_mc", o*4-3);
_root.createEmptyMovieClip("nizgor"+o+"_mc", o*4-2);
_root.createEmptyMovieClip("levver"+o+"_mc", o*4-1);
//Рисуем палки
//Верхняя горизонтальная
with ("verhgor"+o+"_mc") {
lineStyle(3, 0xff0000, 100);
moveTo(x0*2, y0-h/2);
lineTo(x0*2+l, y0-h/2);
}
//Нижная горизонтальная
with ("nizgor"+o+"_mc") {
lineStyle(3, 0xff0000, 100);
moveTo(0, y0+h/2);
lineTo(-l, y0+h/2);
}
//Правая вертикальная
with ("pravver"+o+"_mc") {
lineStyle(3, 0xff0000, 100);
moveTo(x0+l/2, 0);
lineTo(x0+l/2, -h);
}
//Левая вертикальная
with ("levver"+o+"_mc") {
lineStyle(3, 0xff0000, 100);
moveTo(x0-l/2, y0*2);
lineTo(x0-l/2, y0*2+h);
}
rastverh = _root["verhgor"+o+"_mc"]._x-(x0+l/2);
//С помощью этого параметра вычисляется расстояние до конечной точки палки, нужна для вычисления коэф. ускорения
}
onEnterFrame = function () {
//Опять же, так как у нас палок дофига, то идем в цикл:
for (var o = 0; o<w; o++) {
speed = speedtest;
//Вот за этим как раз и нужен был нам спидтест. Чтобы скорость не анулировалась раньше времени
if (_root["verhgor"+o+"_mc"]._x == -(x0+l/2)) {
//Начальные координаты любой из палок (0,0), так что чтобы передвинуть к примеру vrehgor
//Сам рисунок которого появляется за правой границей клипа, его конечные координаты по х
//Должны быть отрицательными
speed = 0;
//Если Палка добралась до места, то скорость анулируется
} else {
p += 0.005;
//А вот и наше ускорение ускорения
k += 0.05;
//С ним и ускорение
n = ((_root["verhgor"+o+"_mc"]._x-x0)*10/rastverh)*k;
//Сам не в курсе, как это называть, но выглядит не плохо
if ((_root["verhgor"+o+"_mc"]._x-speed*n)<=-(x0+l/2)) {
_root["verhgor"+o+"_mc"]._x = -(x0+l/2);
//Если вдруг на "следующем шаге" палка перепрыгнет через точку, то она сразу встает на место
} else {
_root["verhgor"+o+"_mc"]._x -= speed*n;
//Собсно само перемещение
updateAfterEvent();
//Не шибко помогет, но да ничего...
}
}
speed = speedtest;
//А вот и наша страховка! Если на verhgor скорость анулировалась, то она снова стала прежней тут
//Дальше все аналогично верхнему
if (_root["nizgor"+o+"_mc"]._x == x0+l/2) {
speed = 0;
} else {
if ((_root["nizgor"+o+"_mc"]._x+speed*n)>=(x0+l/2)) {
_root["nizgor"+o+"_mc"]._x = x0+l/2;
} else {
_root["nizgor"+o+"_mc"]._x += speed*n;
updateAfterEvent();
}
}
speed = speedtest;
if (_root["pravver"+o+"_mc"]._y == y0+h/2) {
speed = 0;
} else {
if ((_root["pravver"+o+"_mc"]._y+speed*n)>=y0+h/2) {
_root["pravver"+o+"_mc"]._y = y0+h/2;
} else {
_root["pravver"+o+"_mc"]._y += speed*n;
}
}
speed = speedtest;
if (_root["levver"+o+"_mc"]._y == -(y0+h/2)) {
speed = 0;
} else {
if ((_root["levver"+mn+"_mc"]._y-speed*n)<=-(y0+h/2)) {
_root["levver"+mn+"_mc"]._y = -(y0+h/2);
} else {
_root["levver"+mn+"_mc"]._y -= speed*n;
}
}
}
};
(чтобы у каждого прямоугольника были разные координаты, размер и скорость еще не делал еще не делал)