Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.05.2009, 20:21
quazare вне форума Посмотреть профиль Отправить личное сообщение для quazare Найти все сообщения от quazare
  № 1  
Ответить с цитированием
quazare
 
Аватар для quazare

Регистрация: Jul 2004
Сообщений: 430
По умолчанию Изменение размера мувика с помощью драга мышки

Народ. перезадаю вопросец.
Подскажите пожалуйста как сделать ресайз мувика (например треугольника) если потянуть его за какую-либо сторону (драгом мышки).
Если можно примерчик. Спасибо!

Старый 07.05.2009, 22:05
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Привет земляк)) Сделай примерчик, где ты можешь "потянуть треугольник за какую-либо сторону (драгом мышки)" (но только за сторону!!), и я сделаю тебе ресайз. Просто непонятно, как именно ты хочешь чтобы это было реализовано. Т.е. за что "хвататься", что будет "таскаться" и что именно должно ресайзиться.
__________________
Reality.getBounds(this);

Старый 08.05.2009, 10:16
KiL33 вне форума Посмотреть профиль Отправить личное сообщение для KiL33 Найти все сообщения от KiL33
  № 3  
Ответить с цитированием
KiL33
 
Аватар для KiL33

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Код AS1/AS2:
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 минут
Вот так ещё можно поизвращаться..
Код AS1/AS2:
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();
}
Добавлено через 1 час 33 минуты
Пока нечем заняться ещё такую фичу сваял..

Код AS1/AS2:
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. Причина: Заменил код, он, оказывается, был ещё более косячным, чем я предположил.
Старый 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);

Старый 19.07.2009, 16:05
greenhill вне форума Посмотреть профиль Отправить личное сообщение для greenhill Посетить домашнюю страницу greenhill Найти все сообщения от greenhill
  № 5  
Ответить с цитированием
greenhill
 
Аватар для greenhill

Регистрация: Mar 2009
Сообщений: 281
Отправить сообщение для greenhill с помощью ICQ
Код AS1/AS2:
//// Флаг, сохранять ли пропорции
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();
}
Скажите, почему когда размер именяемого клипа делаем больше или меньше 100, то клип за который тянем для изменения первого, не находится в правом нижнем углу первого?
__________________
http://zenpro.blogspot.com/


Последний раз редактировалось iNils; 20.07.2009 в 13:33.
Старый 19.07.2009, 16:58
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А где Вы нашли здесь ДВА клипа? %)
__________________
Reality.getBounds(this);

Старый 19.07.2009, 17:36
greenhill вне форума Посмотреть профиль Отправить личное сообщение для greenhill Посетить домашнюю страницу greenhill Найти все сообщения от greenhill
  № 7  
Ответить с цитированием
greenhill
 
Аватар для greenhill

Регистрация: Mar 2009
Сообщений: 281
Отправить сообщение для greenhill с помощью ICQ
Сори, случайно не то копирнула.
Вот:
Код AS1/AS2:
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.
Старый 20.07.2009, 09:56
KiL33 вне форума Посмотреть профиль Отправить личное сообщение для KiL33 Найти все сообщения от KiL33
  № 8  
Ответить с цитированием
KiL33
 
Аватар для KiL33

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Только сейчас увидел, какое решение предложил Wolsh..просто супер..спасибо!

По теме:
полагаю, так надо было

Код AS1/AS2:
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;
}

Старый 20.07.2009, 10:20
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Автор молчит..)
Может, ему нужно было по 3 точкам рисовать треугольник и его вершины изменять?

P.S>да, привет землякам.)

Старый 20.07.2009, 13:35
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
greenhill, для оформления кода не надо использовать теги цитирования. Читайте описания кнопок.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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