Показать сообщение отдельно
Старый 08.05.2009, 19:14
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: 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);