Форум 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)
-   -   Не перемещаются! (http://www.flasher.ru/forum/showthread.php?t=96259)

XenoneX 27.05.2007 11:43

Не перемещаются!
 
Проблемка такая...

Нужно, чтобы из 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;
                        }
                }
        }
};

(чтобы у каждого прямоугольника были разные координаты, размер и скорость еще не делал еще не делал)

XenoneX 27.05.2007 11:44

Ну и, соответственно, вопрос: "Что же не так?" Я никак не могу понять, у меня вроде все верно, может перемещение в цыклах не работает?

†‡Paladin‡† 27.05.2007 12:48

Несовсем понятно что нужно автору. Лично я прямоугольники рисую так.
Код:

function drawrect(name_mc, h, w, x_axe, y_axe, col) {
        name_mc.beginFill(col);
        name_mc.moveTo(x_axe, y_axe);
        name_mc.lineTo(x_axe, h+y_axe);
        name_mc.lineTo(w+x_axe, h+y_axe);
        name_mc.lineTo(w+x_axe, y_axe);
        name_mc.lineTo(x_axe, y_axe);
        name_mc.endFill();
}


XenoneX 27.05.2007 13:51

Гы, вот смотри.
Мы рисуем 4 палки, потом они сами перемещаются и образуют прямоугольник

Возми первый скрипт, который я сделал, он рабочий, и скопируй его в кадровый. Сразу все поймешь, чего я хочу

Но у меня ничегоне получается, когда мне нао много таких штук

Прошу прощения за кучу постов подряд

etc 27.05.2007 13:56

XenoneX, ещё раз увижу 3 и более постов подряд — поставлю плюс.
Если надо что-то добавить, нужно отредактировать свой пост, а не новый добавлять.

XenoneX 27.05.2007 17:59

Господи, столько умных людей, и ни один не знает?

XenoneX 28.05.2007 09:33

Я в шоке, мои ошибки даже не в логике процесса, а в элементарных вещах... Оказывается в with() надо было прописывать полный путь...
Т.е., к примеру, with(_root["verhgor"+o+"_mc"])


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

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