Просмотр полной версии : рисование мувика курсором
В ролике кликаю мышью и не отпуская правой кнопки двигаю. Надо в этот момент нарисовать прямоугольник так, чтобы после 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;
};
круто, спасибо.
А я не знал, что для 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. Кстати, на форуме запрещено создавать несколько сообщений подряд. Объедините их!
Совсем не понял, как здесь присваиваются имена клипам.
Рисую первый клип, по идее 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++) {
создает вам сотню мувиков сразу.
В том то и дело, что мувики создаются 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;
};
Если я правильно понял, что вы хотите сделать.
Да, все так. А как удалить ненарисованный мувик?
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() будет удалять последний созданный клип.
Спасибо, теперь надо переварить. :umnik2:
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.