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

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

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

Регистрация: Aug 2005
Сообщений: 48
Отправить сообщение для Chilly с помощью ICQ
Thumbs up Если кому интересно, как сделать Zoom c центрированием

Я тут на форуме много тем поэтому поводу делал, но никто не знал как такое сделать. Я имею ввиду в ScrollPane. Я сделал сам. Если кому интересно, вот код:
Код:
myScrollPane.content._xscale = 100;
myScrollPane.content._yscale = 100;
var Const_Koef = 2;
var koef = 1;
var siz = 100;
var PicCentX = myScrollPane.width/2;
var PicCentY = myScrollPane.height/2;
var TmpScrollh = 0;
var TmpScrollv = 0;
var MousePosX = 0;
var MousePosY = 0;
var ContW = myScrollPane.content.width;
var ContH = myScrollPane.content.height;
myScrollPane.vPosition = 0;
myScrollPane.hPosition = 0;
but_inc.onRelease = function() {
	koef = Const_Koef;
};
but_dec.onRelease = function() {
	koef = 1/Const_Koef;
};
but_res.onRelease = function() {
	koef = 1;
};
Delta = function () {
	dx = MousePosX+TmpScrollh;
	dy = MousePosY+TmpScrollv;
	ShP = dx/ContW;
	SvP = dy/ContH;
	if (ShP<0) {
		ShP = 0;
	}
	if (SvP<0) {
		SvP = 0;
	}
	ShP = ShP*myScrollPane.content.width-PicCentX;
	SvP = SvP*myScrollPane.content.height-PicCentY;
	myScrollPane.onComplete();
	if (ShP>myScrollPane.maxHPosition) {
		ShP = myScrollPane.maxHPosition;
	}
	if (SvP>myScrollPane.maxVPosition) {
		SvP = myScrollPane.maxVPosition;
	}
	myScrollPane.hPosition = ShP;
	myScrollPane.vPosition = SvP;
};
_root.myScrollPane.spContentHolder.onRelease = function() {
	repaint();
};
function repaint() {
	if (!((siz == 100 and koef == 0.5) or (siz >> 2000))) {
		siz *= koef;
	}
	TmpScrollh = myScrollPane.hPosition;
	TmpScrollv = myScrollPane.vPosition;
	MousePosX = myScrollPane._xmouse;
	MousePosY = myScrollPane._ymouse;
	ContW = myScrollPane.content.width;
	ContH = myScrollPane.content.height;
	myScrollPane.refreshPane();
	myScrollPane.content._xscale = siz;
	myScrollPane.content._yscale = siz;
	Delta();
	myScrollPane.spContentHolder.onRelease = function() {
		repaint();
	};
}

Старый 18.12.2005, 20:29
alikjan вне форума Посмотреть профиль Отправить личное сообщение для alikjan Найти все сообщения от alikjan
  № 2  
Ответить с цитированием
alikjan

Регистрация: Oct 2005
Сообщений: 28
Меня тоже интересует эта тема
только вот воспользоваться твоим кодом сложновато
Мог бы ты немного прокомментировать свой код ??

Старый 18.12.2005, 21:29
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 3  
Ответить с цитированием
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Я бы оформил функцией то, что выкладываю "во всеобщее пользование". И использовал нормальные имена переменных \ методов, а не а-ля Д. Гурский

Старый 15.05.2006, 14:40
St. Father вне форума Посмотреть профиль Отправить личное сообщение для St. Father Найти все сообщения от St. Father
  № 4  
Ответить с цитированием
St. Father
[+1 20.07.06]
[+1 04.08.2006]

Регистрация: Jun 2005
Сообщений: 190
Отправить сообщение для St. Father с помощью ICQ
По умолчанию Новый разгон на старую тему.

...все это хорошо.... тока вот как замутить то же самое на колесико мыши?
если есть примеры со ScrollPane zoom MouseWheel - дайте линк плиз.
в аттаче фла с картой. скроллпане. зум. 2 варианта решения...
один глючит, второй не работает))))
код прокомментирован. там же описаны проблемы обоих вариантов. парюсь 2й день. туплю жутко. помогите чем можете плз.
З.Ы.: пробую переделать "описанный" выше вариант... но как-то не могу воткнуть...

В идеале должно работать примерно как в первом моем варианте... только там каким-то чудом в цикле пропскается нужное значение, а во втором нехватает дельты какой-то похоже...
Описание работы второго варианта во флашке...
плиииз хелп.
Вложения
Тип файла: rar main2send.rar (143.4 Кб, 48 просмотров)


Последний раз редактировалось St. Father; 15.05.2006 в 17:40.
Старый 18.05.2006, 11:42
kurt84 вне форума Посмотреть профиль Отправить личное сообщение для kurt84 Найти все сообщения от kurt84
  № 5  
Ответить с цитированием
kurt84

Регистрация: May 2006
Сообщений: 2
Вот вариант. работает гораздо быстрее. И главное - работает

Код:
function zoomIn(z){
	if(_root.mapf._width<1500){ //максимальный размер
			_width+=z*(20); //приращение
			_height+=z*(20);
		}
}
function zoomOut(z){
	if(_root.mapf._width>480){
			_root.mapf._width-=z*(20);
			_root.mapf._height-=z*(20);
			if(_root.mapf._width<480) _root.mapf._width=480; //минимальный размер карты
			if(_root.mapf._height<480) _root.mapf._height=480;
			
			var xneed=_root.mapf._width+_root.mapf._x, //если сместилась не так как надо - поправляем.
				yneed=_root.mapf._height+_root.mapf._y;
		
			if(xneed<480) _root.mapf._x+=480-xneed;
			if(yneed<480) _root.mapf._y+=480-yneed;
		}
}

var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(delta) {
    if(delta>0) zoomIn(1);
    else zoomOut(1);
}
Mouse.addListener(mouseListener);

Старый 18.05.2006, 16:08
St. Father вне форума Посмотреть профиль Отправить личное сообщение для St. Father Найти все сообщения от St. Father
  № 6  
Ответить с цитированием
St. Father
[+1 20.07.06]
[+1 04.08.2006]

Регистрация: Jun 2005
Сообщений: 190
Отправить сообщение для St. Father с помощью ICQ
у меня рабочих вариантов с центрированием около 4х. и они оптимальнее предложенного. НО в них не используется контейнер с прокруткой.
Возможно, я не совсем точно суть проблемы описал...
Повторю. Меня интересует зум колесиком в каком-либо контейнере (типа стандартного ScrollPane). если есть аналог СП в котором это реализовано (см. пример) && аффтару невлом дать свою компоненту - то я буду тока рад.

З.Ы. Если кто-то смотрел, во втором моем варианте, похоже, неправильно составлена пропорция. Точнее, она вроде логична, но максимально возможная позиция бегунка меняется абсолютно нелогично, непропорционально
А в первом, видимо, нужно позиции бегунков менять по отдельности (т.е. один если 1 +, то другой м.б. -)


Последний раз редактировалось St. Father; 18.05.2006 в 16:24.
Старый 18.05.2006, 16:42
St. Father вне форума Посмотреть профиль Отправить личное сообщение для St. Father Найти все сообщения от St. Father
  № 7  
Ответить с цитированием
St. Father
[+1 20.07.06]
[+1 04.08.2006]

Регистрация: Jun 2005
Сообщений: 190
Отправить сообщение для St. Father с помощью ICQ
Tip Вариант

Попробовал, значит первый вариант чутка переделать. вышло чудо... зацените... пока самый рабочий вариант)
Если есть предложения по оптимизации кода - прошу...
Вложения
Тип файла: rar main2send.rar (142.9 Кб, 69 просмотров)

Старый 18.05.2006, 17:05
vecalion вне форума Посмотреть профиль Отправить личное сообщение для vecalion Найти все сообщения от vecalion
  № 8  
Ответить с цитированием
vecalion

Регистрация: Jun 2005
Сообщений: 22
Цитата:
Сообщение от St. Father
Если есть предложения по оптимизации кода - прошу...
Можешь масштаб использовать качестве делителя для дельты при передвижении, тогда при любом зуме передвижение будет одинаковое (то место, в котором нажал кнопку после передвижения и останется под курсором, а не так, как сейчас - при зуме в 50% нажимаешь кнопку, передвигаешь мышку на 10 пикселей, а карта передвигается только на 5 пикселей)

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

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

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


 


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


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