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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.01.2007, 08:13
pavel gorlov вне форума Посмотреть профиль Отправить личное сообщение для pavel gorlov Найти все сообщения от pavel gorlov
  № 1  
Ответить с цитированием
pavel gorlov

Регистрация: Jan 2007
Сообщений: 13
Attention zoom объекта относительно курсора мышки

Привет бойцы! Читал топики про карты и навигацию, но у меня несколько другая задача. Пишу систему навигации над графическим объектом. Вообщем уже 3-е сутки пошил, как я бъюсь над простой задачей:


1. Есть объект (movieClip)
2. Есть набор уже написанных мною функций, которые работают тут (кнопки фтопку, они для дебагинга)

- перемещение объекта по XY в зависимости положении мышки +коэф ускорения.

- Key.isDown(пробел) стандартная таскалка драг\дроп (как в фотошопе)
- мышкой выделяем область экрана, после чего центр выделения сместится в центр экрана (во фьючере выделенныя область должна увеличится в рамки экрана, опять же как в фотошопе, но для этого, мать его, мне и нужна zoom функция)

3. Хочу сделать следующее: делать zoom относительно координат мышки,
т.е. вот так:


Народ, я умом всё понимаю, ну Нихрена не могу сделать....
Если у кого то из Вас была такая же проблема, поделитесь опытом плиз
Я не сторонник искать\рыть чужие скрипты, тем более мне интересно самому понять до конца в чем моя ошибка. Думаю общими усилиями у нас получиться найти нужное русло. (Русло не нашла целая кафедра информатики в моём ВУЗе )

Я пытаюсь это делать так, хрень полная и не работает
Код:
// f - навигируему объект

var  x_mouse = _root._xmouse;
var  kx = 0;
o = new Object();

o.onMouseWheel = function(d) {
with(f){
	if(_root._xmouse == x_mouse)
	{
    d *= 2;
	dw = (_width / _height ) * d;
	dh = d;
	w_old = _width;
//    kx = _root._xmouse / _width;
	trace("_width СТАР=" + _width + " kx= "+ kx + "_x=" + _x);
	_width += dw;
	_height += dh;
	_x = _root._xmouse - (_width * kx);
	//_x = _x - 
	trace("_width НОВ=" + _width + " kx= "+ kx + "_x=" + _x);
	}
	else
	{
		x_mouse = _root._xmouse;
		kx = _root._xmouse / _width;
		trace("mouse=" + _root._xmouse + " kx= "+ kx);
	}
 }
 }

Mouse.addListener(o);


Последний раз редактировалось pavel gorlov; 14.01.2007 в 08:19.
Старый 14.01.2007, 13:24
vic_ вне форума Посмотреть профиль Отправить личное сообщение для vic_ Посетить домашнюю страницу vic_ Найти все сообщения от vic_
  № 2  
Ответить с цитированием
vic_
 
Аватар для vic_

Регистрация: Sep 2006
Адрес: Zaporozhye, Ukraine
Сообщений: 141
может я что то не понял.
Текущий зум вычисляется как отношение площади карты к площади выделения. Если площадь карты равна 100, а площадь выделения 50, то zoom=100/50=2. Отлично, теперь передвигаем карту так, что бы центр выделения оказался в центре вьюпорта а после смещения увеличиваем карту на величину зума. По моему все.


Последний раз редактировалось vic_; 14.01.2007 в 13:30.
Старый 14.01.2007, 14:53
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код:
// f - навигируему объект
Mouse.addListener(this);
function onMouseWheel(d) {
	var s=f._xscale;
	var mouseX=_xmouse;
	var mouseY=_ymouse
	var dx=(mouseX-f._x)/s;
	var dy=(mouseY-f._y)/s;
	f._xscale=f._yscale+=d;
	s=f._xscale;
	f._x=mouseX-dx*s;
	f._y=mouseY-dy*s;
	
}

Старый 24.02.2011, 15:24
AlexG77 вне форума Посмотреть профиль Отправить личное сообщение для AlexG77 Найти все сообщения от AlexG77
  № 4  
Ответить с цитированием
AlexG77

Регистрация: Dec 2010
Сообщений: 30
в данном коде, при уменьшении, картинка переворачивается на 180 при достижении минимального размера. Каким образом этого можно избежать?

Старый 15.01.2007, 02:20
pavel gorlov вне форума Посмотреть профиль Отправить личное сообщение для pavel gorlov Найти все сообщения от pavel gorlov
  № 5  
Ответить с цитированием
pavel gorlov

Регистрация: Jan 2007
Сообщений: 13
silin спосибо тебе! То, что нужно! Всё гениальное просто, как 9 строк кода. ;-)

Старый 24.02.2011, 15:44
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 6  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Очевидно поставить ограничения на масштаб.
__________________
hauts.ru

Старый 24.02.2011, 18:25
AlexG77 вне форума Посмотреть профиль Отправить личное сообщение для AlexG77 Найти все сообщения от AlexG77
  № 7  
Ответить с цитированием
AlexG77

Регистрация: Dec 2010
Сообщений: 30
Выставляю масштаб, но все равно, картинка переворачивается и начинает увеличиваться
Код AS1/AS2:
if (map._xscale<200-d&&map._xscale>5-d)

Старый 24.02.2011, 19:13
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 8  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS1/AS2:
map._xscale = map._xscale < 5 ? 5 : map._xscale;
map._yscale = map._xscale;
__________________
hauts.ru

Старый 24.02.2011, 19:37
AlexG77 вне форума Посмотреть профиль Отправить личное сообщение для AlexG77 Найти все сообщения от AlexG77
  № 9  
Ответить с цитированием
AlexG77

Регистрация: Dec 2010
Сообщений: 30
Спасибо!

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

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

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


 


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


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