|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jul 2004
Сообщений: 430
|
Изменение размера мувика с помощью драга мышки
Народ. перезадаю вопросец.
Подскажите пожалуйста как сделать ресайз мувика (например треугольника) если потянуть его за какую-либо сторону (драгом мышки). Если можно примерчик. Спасибо! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Привет земляк)) Сделай примерчик, где ты можешь "потянуть треугольник за какую-либо сторону (драгом мышки)" (но только за сторону!!), и я сделаю тебе ресайз. Просто непонятно, как именно ты хочешь чтобы это было реализовано. Т.е. за что "хвататься", что будет "таскаться" и что именно должно ресайзиться.
__________________
Reality.getBounds(this); |
|
|||||
var _mc:MovieClip = this.createEmptyMovieClip("square_mc", 1); var square_mc:MovieClip = _mc.createEmptyMovieClip("square_mc", 2); square_mc.beginFill(0xFF0000); square_mc.moveTo(0,0); square_mc.lineTo(100,0); square_mc.lineTo(100,100); square_mc.lineTo(0,100); square_mc.endFill(); var _mc_at:MovieClip = _mc.createEmptyMovieClip("upr", 3); _mc_at.beginFill(0xFFFF00); _mc_at.moveTo(0,0); _mc_at.lineTo(20,0); _mc_at.lineTo(20,20); _mc_at.lineTo(0,20); _mc_at.endFill(); _mc_at.onPress = drag_start; _mc_at.onRelease = drag_stop; function drag_start() { this.startDrag(); this.onMouseMove = function() { scx = _mc_at._x; scy = _mc_at._y; trace(scy); square_mc._yscale = scy; square_mc._xscale = scx; }; } function drag_stop() { this.stopDrag(); } Уверен, Wolsh в стомильонтысяч раз реализует это лучше P.S. тянуть нужно жёлтый квадратик.. Добавлено через 28 минут Вот так ещё можно поизвращаться.. var _mc:MovieClip = this.createEmptyMovieClip("square_mc", 1); var square_mc:MovieClip = _mc.createEmptyMovieClip("square_mc", 2); square_mc.beginFill(0xFF0000); square_mc.moveTo(0,0); square_mc.lineTo(100,0); square_mc.lineTo(100,100); square_mc.lineTo(0,100); square_mc.endFill(); var _mc_at:MovieClip = _mc.createEmptyMovieClip("upr", 3); _mc_at.beginFill(0xFFFF00); _mc_at.moveTo(100,100); _mc_at.lineTo(80,100); _mc_at.lineTo(80,80); _mc_at.lineTo(100,80); _mc_at.endFill(); _mc_at.onPress = drag_start; _mc_at.onRelease = drag_stop; function drag_start() { this.startDrag(); this.onMouseMove = function() { scx = _mc_at._x+100; scy = _mc_at._y+100; trace(scy); square_mc._yscale = scy; square_mc._xscale = scx; updateAfterEvent(); }; } function drag_stop() { this.stopDrag(); } square_mc.onPress=drag_start_mc square_mc.onRelease=drag_stop_mc function drag_start_mc() { this._parent.startDrag(); } function drag_stop_mc() { this._parent.stopDrag(); } Пока нечем заняться ещё такую фичу сваял.. var _mc:MovieClip = this.createEmptyMovieClip("square_mc", 1); var square_mc:MovieClip = _mc.createEmptyMovieClip("square_mc", 2); square_mc.beginFill(0xFF0000); square_mc.moveTo(0,0); square_mc.lineTo(100,0); square_mc.lineTo(100,100); square_mc.lineTo(0,100); square_mc.endFill(); var _mc_at:MovieClip = _mc.createEmptyMovieClip("upr", 3); _mc_at.beginFill(0xFFFF00); _mc_at.moveTo(100,100); _mc_at.lineTo(80,100); _mc_at.lineTo(80,80); _mc_at.lineTo(100,80); _mc_at.endFill(); _mc_at.onPress = drag_start; _mc_at.onRelease = drag_stop; function drag_start() { this.startDrag(); this.onMouseMove = size; } function size() { scx = _mc_at._x+100; scy = _mc_at._y+100; trace(scy); square_mc._yscale = scy; square_mc._xscale = scx; updateAfterEvent(); } function drag_stop() { this.stopDrag(); } square_mc.onPress = drag_start_mc; square_mc.onRelease = drag_stop_mc; function drag_start_mc() { this._parent.startDrag(); } function drag_stop_mc() { this._parent.stopDrag(); } //разреш.монитора>>это всё лишний хлам...>>>>>>>>>> var scr_x = System.capabilities.screenResolutionX; var scr_y = System.capabilities.screenResolutionY; trace('Разрешение манитора: '+scr_x+"/"+scr_y); //Двойной клик var delay:Number = 300; var myBroadcaster:Object = new Object(); AsBroadcaster.initialize(myBroadcaster); var myListener:Object = new Object(); myBroadcaster.addListener(myListener); Mouse.addListener(myListener); myListener.onMouseDown = function() { if (_mc.square_mc.hitTest(_root._xmouse, _root._ymouse, true)) { clickInterval = getTimer()-clickTime; clickTime = getTimer(); if (clickInterval<delay) { myBroadcaster.broadcastMessage("onDoubleClick"); clickTime = -delay; } } }; myListener.onDoubleClick = function() { if (!this.flag) { screen_MAX(); } else { screen_MIN(); } this.flag = !this.flag; }; function screen_MAX() { _mc_at._x = scr_x; _mc_at._y = scr_y; size(); trace(_mc_at._x); } function screen_MIN() { _mc_at._x = 100; _mc_at._y = 100; size(); } Последний раз редактировалось KiL33; 08.05.2009 в 10:30. Причина: Заменил код, он, оказывается, был ещё более косячным, чем я предположил. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
2 и 3 нормально, я вот подобное использовал - http://flasher.ru/forum/showthread.php?t=101951&page=2. Но автор вопроса хочет, как я понимаю, даже не просто стандартный ресайз окна - двигая по-отдельности его бордеры, а ресайз буквально произвольной фигуры ("например - треугольник" - нормальный такой пример, треугольный, хватай и тащи -чего, куда, я так и не понял как он будет ресайзиться, у меня в глазах он только искажается - если двигать грань, то что остается неподвижным - противоположный угол.... не, это надо думать))))
Добавлено через 3 часа 59 минут Вот примерно как я понял задачу. Тут два разных варианта поведения, зависят от флага constrain - масштабирование с сохранением пропорций или без. //// Флаг, сохранять ли пропорции var constrain:Boolean = false; //// var mc:MovieClip = _root.createEmptyMovieClip("mc", 20); mc.lineStyle(0,0,0); mc.beginFill(0x66aa66); mc.moveTo(10,20); mc.lineTo(200,240); mc.lineTo(300,50); mc._x = 100, mc._y = 80 mc.onPress = startScale; mc.onRelease = mc.onReleaseOutside = stopScale; //// var startX:Number; var startY:Number; var startXscale:Number; var startYscale:Number; var koefXY:Number; //// var centerX:Number = mc._x + mc._width/2; var centerY:Number = mc._y + mc._height/2; //// function startScale () : Void { startXscale = this._xscale; startYscale = this._yscale; startX = _root._xmouse; startY = _root._ymouse; var kx = Math.sqrt(Math.pow(startX - centerX, 2) + Math.pow(startY - centerY, 2)); koefXY = startXscale/kx; this.onMouseMove = dragScale; } function stopScale () : Void { this.onMouseMove = null; } function dragScale () : Void { //// SCALE XY var xdir:Number = (startXscale>0 ? 1 : -1); var ydir:Number = (startYscale>0 ? 1 : -1); var vx:Number = (centerX > startX) ? startX - _root._xmouse : _root._xmouse - startX; var vy:Number = (centerY > startY) ? startY - _root._ymouse : _root._ymouse - startY; if(constrain) { var dirX = (_root._xmouse > centerX)&&(startX > centerX) ? 1 : (_root._xmouse < centerX)&&(startX < centerX) ? 1 : -1; var dirY = (_root._ymouse > centerY)&&(startY > centerY) ? 1 : (_root._ymouse < centerY)&&(startY < centerY) ? 1 : -1; var deltaXY = Math.sqrt(Math.pow(centerX - _root._xmouse, 2) + Math.pow(centerY - _root._ymouse, 2)); this._yscale=this._xscale = koefXY*deltaXY*dirX*dirY;// } else { this._xscale = startXscale + vx*xdir; this._yscale = startYscale + vy*ydir; } //// XY var _xdir:Number = (this._xscale>0 ? 1 : -1); var _ydir:Number = (this._yscale>0 ? 1 : -1); this._x = centerX - this._width*_xdir/2; this._y = centerY - this._height*_ydir/2; //// updateAfterEvent(); }
__________________
Reality.getBounds(this); |
|
|||||
//// Флаг, сохранять ли пропорции var constrain:Boolean = false; //// var mc:MovieClip = _root.createEmptyMovieClip("mc", 20); mc.lineStyle(0,0,0); mc.beginFill(0x66aa66); mc.moveTo(10,20); mc.lineTo(200,240); mc.lineTo(300,50); mc._x = 100, mc._y = 80 mc.onPress = startScale; mc.onRelease = mc.onReleaseOutside = stopScale; //// var startX:Number; var startY:Number; var startXscale:Number; var startYscale:Number; var koefXY:Number; //// var centerX:Number = mc._x + mc._width/2; var centerY:Number = mc._y + mc._height/2; //// function startScale () : Void { startXscale = this._xscale; startYscale = this._yscale; startX = _root._xmouse; startY = _root._ymouse; var kx = Math.sqrt(Math.pow(startX - centerX, 2) + Math.pow(startY - centerY, 2)); koefXY = startXscale/kx; this.onMouseMove = dragScale; } function stopScale () : Void { this.onMouseMove = null; } function dragScale () : Void { //// SCALE XY var xdir:Number = (startXscale>0 ? 1 : -1); var ydir:Number = (startYscale>0 ? 1 : -1); var vx:Number = (centerX > startX) ? startX - _root._xmouse : _root._xmouse - startX; var vy:Number = (centerY > startY) ? startY - _root._ymouse : _root._ymouse - startY; if(constrain) { var dirX = (_root._xmouse > centerX)&&(startX > centerX) ? 1 : (_root._xmouse < centerX)&&(startX < centerX) ? 1 : -1; var dirY = (_root._ymouse > centerY)&&(startY > centerY) ? 1 : (_root._ymouse < centerY)&&(startY < centerY) ? 1 : -1; var deltaXY = Math.sqrt(Math.pow(centerX - _root._xmouse, 2) + Math.pow(centerY - _root._ymouse, 2)); this._yscale=this._xscale = koefXY*deltaXY*dirX*dirY;// } else { this._xscale = startXscale + vx*xdir; this._yscale = startYscale + vy*ydir; } //// XY var _xdir:Number = (this._xscale>0 ? 1 : -1); var _ydir:Number = (this._yscale>0 ? 1 : -1); this._x = centerX - this._width*_xdir/2; this._y = centerY - this._height*_ydir/2; //// updateAfterEvent(); }
__________________
http://zenpro.blogspot.com/ Последний раз редактировалось iNils; 20.07.2009 в 13:33. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А где Вы нашли здесь ДВА клипа? %)
__________________
Reality.getBounds(this); |
|
|||||
Сори, случайно не то копирнула.
Вот: var _mc:MovieClip = this.createEmptyMovieClip("square_mc", 1); var square_mc:MovieClip = _mc.createEmptyMovieClip("square_mc", 2); square_mc.beginFill(0xFF0000); square_mc.moveTo(0,0); square_mc.lineTo(100,0); square_mc.lineTo(100,100); square_mc.lineTo(0,100); square_mc.endFill(); var _mc_at:MovieClip = _mc.createEmptyMovieClip("upr", 3); _mc_at.beginFill(0xFFFF00); _mc_at.moveTo(100,100); _mc_at.lineTo(80,100); _mc_at.lineTo(80,80); _mc_at.lineTo(100,80); _mc_at.endFill(); _mc_at.onPress = drag_start; _mc_at.onRelease = drag_stop; function drag_start() { this.startDrag(); this.onMouseMove = function() { scx = _mc_at._x+100; scy = _mc_at._y+100; trace(scy); square_mc._yscale = scy; square_mc._xscale = scx; updateAfterEvent(); }; } function drag_stop() { this.stopDrag(); } square_mc.onPress=drag_start_mc square_mc.onRelease=drag_stop_mc function drag_start_mc() { this._parent.startDrag(); } function drag_stop_mc() { this._parent.stopDrag(); }
__________________
http://zenpro.blogspot.com/ Последний раз редактировалось iNils; 20.07.2009 в 13:34. |
|
|||||
Только сейчас увидел, какое решение предложил Wolsh..просто супер..спасибо!
По теме: полагаю, так надо было var minwidth:Number = 0; var minheight:Number = 0; var _mc:MovieClip = this.createEmptyMovieClip("square_mc", 1); var square_mc:MovieClip = _mc.createEmptyMovieClip("square_mc", 2); square_mc.beginFill(0xFF0000); square_mc.moveTo(0,0); square_mc.lineTo(100,0); square_mc.lineTo(100,100); square_mc.lineTo(0,100); square_mc.endFill(); var _mc_at:MovieClip = _mc.createEmptyMovieClip("upr", 3); _mc_at.beginFill(0xFFFF00); _mc_at.moveTo(100,100); _mc_at.lineTo(80,100); _mc_at.lineTo(80,80); _mc_at.lineTo(100,80); _mc_at.endFill(); _mc_at.onPress = drag_start; function drag_start() { _mc_at.onMouseMove = function() { this._x = Math.max(_xmouse-90, minwidth); this._y = Math.max(_ymouse-90, minheight); scx = _mc_at._x+100; scy = _mc_at._y+100; trace(scy); square_mc._yscale = scy; square_mc._xscale = scx; updateAfterEvent(); }; } _mc_at.onMouseUp = function() { delete _mc_at.onMouseMove; }; square_mc.onPress = drag_start_mc; square_mc.onRelease = drag_stop_mc; function drag_start_mc() { _root.startDrag(); this.onMouseMove = function() { updateAfterEvent(); }; } function drag_stop_mc() { this.stopDrag(); delete this.onMouseMove; } |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Автор молчит..)
Может, ему нужно было по 3 точкам рисовать треугольник и его вершины изменять? P.S>да, привет землякам.)
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 19:02. |
|
« Предыдущая тема | Следующая тема » |
|
|