Форум 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=113834)

Dear.D 10.07.2008 15:38

рисование мувика курсором
 
В ролике кликаю мышью и не отпуская правой кнопки двигаю. Надо в этот момент нарисовать прямоугольник так, чтобы после onRelease вместо прямоугольника на сцене остался мувик. Ниже код которым я пытаюсь рисовать мувик, но не могу допереть, как удалять промежуточные линии (во время MouseMove должен оставаться один прямоугольник и растягиваться)
Код:

this.createEmptyMovieClip("mc_mc", this.getNextHighestDepth());
mc_mc.lineStyle(0, 0, 0);
mc_mc.beginFill(0, 0);
mc_mc.moveTo(0, 0);
mc_mc.lineTo(550, 0);
mc_mc.lineTo(550, 400);
mc_mc.lineTo(0, 400);
mc_mc.lineTo(0, 0);
mc_mc.endFill();
mc_mc.onPress = function() {
        var x = this._xmouse, y = this._ymouse;
        this.createEmptyMovieClip("create_mc", this.getNextHighestDepth());
        this.onMouseMove = function() {
                var dx = this._xmouse, dy = this._ymouse;
                this.create_mc.lineStyle(2, 0, 100);
                this.create_mc.moveTo(x, y);
                this.create_mc.lineTo(dx, y);
                this.create_mc.lineTo(dx, dy);
                this.create_mc.lineTo(x, dy);
                this.create_mc.lineTo(x, y);
        };
};
mc_mc.onRelease = mc_mc.onReleaseOutside=function () {
        this.create_mc.removeMovieClip();
};


olexandr 10.07.2008 16:03

Код:

this.onMouseDown = function() {
        var sub:MovieClip = this.createEmptyMovieClip('sub'+this.getNextHighestDepth(), this.getNextHighestDepth());
        sub._x = this._xmouse;
        sub._y = this._ymouse;
        this.onMouseMove = function() {
                sub.clear();
                sub.lineStyle(2,0,100);
                sub.moveTo(0,0);
                sub.lineTo(0,this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x,this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x,0);
                sub.lineTo(0,0);
        };
};
this.onMouseUp = function() {
        delete this.onMouseMove;
};


Dear.D 10.07.2008 16:44

круто, спасибо.
А я не знал, что для onMouseDown не нужен объект в виде клипа.

А как мне убить рисовалку, когда надо перетащить нарисованный мувик?
Еще, прежде чем нарисованный мувик станет драгабельным нужен один клик, как от этого избавиться?
Код:

this.onMouseDown = function() {
        for (i=1; i<200; i++) {
                this["sub"+i].onPress = function() {
                        this.startDrag();
                };
                this["sub"+i].onRelease = this["sub"+i].onReleaseOutside=function () {
                        stopDrag();
                };
        }
        var N = 1+this.getNextHighestDepth();
        var nam:String = "sub"+N;
        var sub:MovieClip = this.createEmptyMovieClip(nam, this.getNextHighestDepth());
        sub._x = this._xmouse;
        sub._y = this._ymouse;
        this.onMouseMove = function() {
                sub.clear();
                sub.lineStyle(2, 0, 100);
                sub.beginFill(0x0000FF, 50);
                sub.moveTo(0, 0);
                sub.lineTo(0, this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x, this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x, 0);
                sub.lineTo(0, 0);
                sub.endFill();
        };
};
this.onMouseUp = function() {
        delete this.onMouseMove;
};

А может так, зажимаю shift + onMouseDown - рисую, просто onMouseDown - перетаскиваю.
Или отловить, что курсор над мувиком, тогда надо отключить рисовалку. Как? :wacko:

olexandr 10.07.2008 18:20

>> А я не знал, что для onMouseDown не нужен объект в виде клипа.
Так ведь мы пишем в руте, а рут тоже является мувиком

>> Или отловить, что курсор над мувиком, тогда надо отключить рисовалку
Именно так!

p.s. Кстати, на форуме запрещено создавать несколько сообщений подряд. Объедините их!

Dear.D 11.07.2008 11:37

Совсем не понял, как здесь присваиваются имена клипам.
Рисую первый клип, по идее N = 1+свободная глубина (0). Когда этот клип пытаюсь перетаскивать trace выдает имя sub100. В коде не создается клип с таким именем. Как так?
Как следствие, последующие разы рисуются клипы с неизвестными мне именами, поэтому их не получается таскать.
Код:

function drawMovie() {
        var N:Number = 1+this.getNextHighestDepth();
        var nam:String = "sub"+N;
        var sub:MovieClip = this.createEmptyMovieClip(nam, this.getNextHighestDepth());
        sub._x = this._xmouse;
        sub._y = this._ymouse;
        this.onMouseMove = function() {
                sub.clear();
                sub.lineStyle(2, 0, 100);
                sub.beginFill(0x0000FF, 50);
                sub.moveTo(0, 0);
                sub.lineTo(0, this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x, this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x, 0);
                sub.lineTo(0, 0);
                sub.endFill();
        };
}
this.onMouseDown = function() {
        for (i=1; i<=100; i++) {
                this["sub"+i].onPress = function() {
                        delete this._parent.onMouseMove;
                        this.startDrag();
                        trace(this);
                };
                this["sub"+i].onRelease = this["sub"+i].onReleaseOutside=function () {
                        stopDrag();
                };
                drawMovie();
        }
};
this.onMouseUp = function() {
        delete this.onMouseMove;
};


crazyone 11.07.2008 12:27

Как это не создается?
Этот цикл:
Код:

for (i=1; i<=100; i++) {
создает вам сотню мувиков сразу.

Dear.D 11.07.2008 12:52

В том то и дело, что мувики создаются createEmptyMovieClip, не важно, что эта функция внутри цикла. К тому же переменная i никак не связана с созданием новых имен, я ее ввел, чтобы отловить уже созданные мувики (иначе просто не знаю как к ним обращаться).
Мой мозг не выдерживает, я уже запутался :wacko:

Мож где почитать, тыкните пальцем.

crazyone 11.07.2008 13:09

Цитата:

В том то и дело, что мувики создаются createEmptyMovieClip, не важно, что эта функция внутри цикла.
Как это неважно? Эта функция у вас вызывается сто раз, вот она и создает сто мувиков.

Цитата:

К тому же переменная i никак не связана с созданием новых имен, я ее ввел, чтобы отловить уже созданные мувики (иначе просто не знаю как к ним обращаться).
Ну, она-то не связана, но getNextHighestDepth() связана с количеством занятых глубин в флешке, т.е. с количеством мувиков, которые уже созданы.

Зачем вам этот цикл вообще?
Сделайте так, и не морочьте себе голову:
Код:

function drawMovie() {
        var N:Number = 1+this.getNextHighestDepth();
        var nam:String = "sub"+N;
        var sub:MovieClip = this.createEmptyMovieClip(nam, this.getNextHighestDepth());
        sub._x = this._xmouse;
        sub._y = this._ymouse;
        this.onMouseMove = function() {
                sub.clear();
                sub.lineStyle(2, 0, 100);
                sub.beginFill(0x0000FF, 50);
                sub.moveTo(0, 0);
                sub.lineTo(0, this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x, this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x, 0);
                sub.lineTo(0, 0);
                sub.endFill();
        };
        return sub;
}
this.onMouseDown = function() {
                      var mc=drawMovie();
                mc.onPress = function() {
                        delete this._parent.onMouseMove;
                        this.startDrag();
                        trace(this);
                };
                mc.onRelease = this["sub"+i].onReleaseOutside=function () {
                        stopDrag();
                };
};
this.onMouseUp = function() {
        delete this.onMouseMove;
};

Если я правильно понял, что вы хотите сделать.

Dear.D 11.07.2008 13:44

Да, все так. А как удалить ненарисованный мувик?

crazyone 11.07.2008 13:55

Чтобы удалить нарисованый мувик, вам нужно иметь на него ссылку.
Нужно ее где-нибудь сохранить.
Я не совсем понимаю ваши задачи, попробуйте что-то в этом роде:
Код:

var rectangles:Array=new Array();
function drawMovie() {
        var N:Number = 1+this.getNextHighestDepth();
        var nam:String = "sub"+N;
        var sub:MovieClip = this.createEmptyMovieClip(nam, this.getNextHighestDepth());
        sub._x = this._xmouse;
        sub._y = this._ymouse;
        this.onMouseMove = function() {
                sub.clear();
                sub.lineStyle(2, 0, 100);
                sub.beginFill(0x0000FF, 50);
                sub.moveTo(0, 0);
                sub.lineTo(0, this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x, this._ymouse-sub._y);
                sub.lineTo(this._xmouse-sub._x, 0);
                sub.lineTo(0, 0);
                sub.endFill();
        };
        rectangles.push(sub);
        return sub;
}
this.onMouseDown = function() {
                      var mc=drawMovie();
                mc.onPress = function() {
                        delete this._parent.onMouseMove;
                        this.startDrag();
                        trace(this);
                };
                mc.onRelease = this["sub"+i].onReleaseOutside=function () {
                        stopDrag();
                };
               
};
this.onMouseUp = function() {
        delete this.onMouseMove;
};

function deleteMovie(){
    rectangles.pop().removeMovieClip();
}

Тогда в массиве rectangles у вас будут содержаться ссылки на созданные мувики. Функция deleteMovie() будет удалять последний созданный клип.


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

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