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

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

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

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 489
Отправить сообщение для Snut с помощью ICQ Отправить сообщение для Snut с помощью MSN Отправить сообщение для Snut с помощью Skype™
Attention Позиционирование внешнего мувика относительного внутреннего

Вопрос больше не по програмированию а по проектированию. Сталкнулся со следующей задачей: Есть внешний мувик внутри него 235 вмнутренних меньшего размера, при выборе внутреннего мувика надо передвинуть внешний так чтобы выбранный объект стал в центре флешки и сзумировался на ну допустим 50% рабочей области (800*600), соответственно реализовывать такое надо через Tween начальные координаты и как скалированн внешний мувик я получить могу, но вот не могу додумать как расчитать на сколько сместить внешний мувик зная координаты центра внутреннего мувика и соотношение его размеров к размеру 800*600, на данный момент родилось следущее:

Код:
function moveToCountry(mc):Void{
	var mc:MovieClip;
	var xEnd:Number = mc._x + Math.floor(mc._width/2); // координата центра по Х мувика
	var yEnd:Number = mc._y + Math.floor(mc._height/2); // координата по y центра мувика
	var zoomEnd:Number = (Math.floor(800/mc._width))*100;
	var xStart:Number = _root.mapHolder.mapCountry._x;
	var yStart:Number = _root.mapHolder.mapCountry._y;
	var zoomXStart:Number = _root.mapHolder.mapCountry._xscale; //xscale == yscale
}
может подскажет кто, а то мозг вспух слегка...
__________________
Работаю

Старый 18.09.2007, 14:32
Snut вне форума Посмотреть профиль Отправить личное сообщение для Snut Посетить домашнюю страницу Snut Найти все сообщения от Snut
  № 2  
Ответить с цитированием
Snut
 
Аватар для Snut

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 489
Отправить сообщение для Snut с помощью ICQ Отправить сообщение для Snut с помощью MSN Отправить сообщение для Snut с помощью Skype™
Вот что получилось на данный момент... но координаты не получаются те что нужны... не получается их вытащить.... помогите разобраться пожалуйста.

Код:
function moveToCountry(mc):Void {
	var mc:MovieClip;
	var xStart:Number = this.mapCountry._x;
	var yStart:Number = this.mapCountry._y;
	_root.mapCountry._xscale = this.mapCountry._yscale;
	var scaleStart:Number = this.mapCountry._xscale;
	var zoomRatio:Number = (Stage.width / 2) / _root.mapCountry[mc]._width;
	var scaleEnd:Number = Math.floor(scaleStart * zoomRatio);
	var mcXcenter:Number = this.mapCountry[mc]._width / 2;
	var mcYcenter:Number = this.mapCountry[mc]._height / 2;
	this.mapCountry._xscale = scaleEnd;
	this.mapCountry._yscale = scaleEnd;
	var xEnd:Number = mapCountry._x - mapCountry._width / 2;
	var yEnd:Number = mapCountry._y - mapCountry._height / 2;
/*	var mcPoint:Object;
	mcPoint.x = xEnd;
	mcPoint.y = yEnd;
*/	_root.mapCountry.localToGlobal(mcPoint);
	trace("xStart: " + xStart);
	trace("yStart: " + yStart);
	trace("xEnd: " + xEnd);
	trace("yEnd: " + yEnd);
	trace("scaleStart: " + scaleStart);
	trace("scaleEnd: " + scaleEnd);
	trace("zoomRatio: " + zoomRatio);
	trace("------------------");
	this.mapCountry._xscale = scaleStart;
	this.mapCountry._yscale = scaleStart;
	var framesCount:Number = 25;
	var easeType:String = Back.easeOut;
	var t1:Tween = new Tween(mapCountry, "_x", easeType, xStart, xEnd, framesCount, false);
	var t2:Tween = new Tween(mapCountry, "_y", easeType, yStart, yEnd, framesCount, false);
	var t3:Tween = new Tween(mapCountry, "_xscale", easeType, scaleStart, scaleEnd, framesCount, false);
	var t3:Tween = new Tween(mapCountry, "_yscale", easeType, scaleStart, scaleEnd, framesCount, false);
}
__________________
Работаю

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

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 489
Отправить сообщение для Snut с помощью ICQ Отправить сообщение для Snut с помощью MSN Отправить сообщение для Snut с помощью Skype™
Вот исходник, первый переход происходит нормально, а дальше все уползает черти куды... не могу понять в чем ошибка, точнее могу понять но не получается исправить... нужно нормально расчитать финальные координаты... Но мой мозг что-то это делать не хочет...
Вложения
Тип файла: rar twee.rar (147.4 Кб, 59 просмотров)
__________________
Работаю

Старый 18.09.2007, 22:39
island вне форума Посмотреть профиль Отправить личное сообщение для island Посетить домашнюю страницу island Найти все сообщения от island
  № 4  
Ответить с цитированием
island
 
Аватар для island

Регистрация: Jul 2006
Адрес: nsk
Сообщений: 93
Отправить сообщение для island с помощью ICQ
вы правильно стали копать в направлении перевода локальных координат в глобальные... вот так должно работать
Код:
var point:Object = {x:0, y:0};
mapCountry[mc].localToGlobal( point );
var xEnd:Number = 400 + xStart - point.x;
var yEnd:Number = 300 + yStart - point.y;

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

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 489
Отправить сообщение для Snut с помощью ICQ Отправить сообщение для Snut с помощью MSN Отправить сообщение для Snut с помощью Skype™
есть кнопки + и - для них есть следующее:

Код:
this.navigation.zoomInBtn.onRelease = function() {
	if (zoomFlag == 1) {
		zoomIn(2);
		zoomFlag = 2;
		this.enabled = false;
		_root.navigation.zoomOutBtn.enabled = true;
	} else if (zoomFlag == 0.5) {
		this.enabled = true;
		zoomIn(2);
		zoomFlag = 1;
		_root.navigation.zoomOutBtn.enabled = true;
	} else if (zoomFlag == 2) {
		_root.navigation.zoomOutBtn.enabled = true;
	}

};
this.navigation.zoomOutBtn.onRelease = function() {
	if (zoomFlag == 1) {
		zoomOut(0.5);
		zoomFlag = 0.5;
		this.enabled = false;
		_root.navigation.zoomInBtn.enabled = true;
	} else if (zoomFlag == 2) {
		this.enabled = true;
		zoomOut(0.5);
		zoomFlag = 1;
		_root.navigation.zoomInBtn.enabled = true;
	} else if (zoomFlag == 0.5) {
		_root.navigation.zoomInBtn.enabled = true;
	}
};
что прекрасно работает, проблема с функциями zoomIn и zoomOut, что должно происходить:

при нажатии на + объект вне зависимости от положения должен увеличиваться в 2 раза и та точка которая была в центре сцены должна оставаться в ее центре.

при нажатии на - объект вне зависимости от положения должен уменьшаться в 2 раза и та точка которая была в центре сцены должна оставаться в ее центре.

вообщем то что я понаписал - не работает... проблема опять же с конечными координатами.. бьюсь об стену второй день а код так и не хочет получаться... наставьте на путь истинный.

Код:
function zoomIn(t) {
	scaleStart = _root.mapCountry._xscale;
	scaleEnd = scaleStart * t;
	xStart = _root.mapCountry._x;
	_root.mapCountry._xscale = scaleEnd;
	newX = _root.mapCountry._width/2;
	_root.mapCountry._xscale = scaleStart;
	xEnd = newX - xStart;
	var t1:Tween = new Tween(mapCountry, "_xscale", easeType, scaleStart, scaleEnd, framesCount, false);
	var t2:Tween = new Tween(mapCountry, "_yscale", easeType, scaleStart, scaleEnd, framesCount, false);
	var t3:Tween = new Tween(mapCountry, "_x", easeType, xStart, xEnd, framesCount, false);
	var t4:Tween = new Tween(mapCountry, "_y", easeType, yStart, yEnd, framesCount, false);
}
заранее спасибо.
__________________
Работаю

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

Регистрация: Aug 2007
Адрес: Ukraine, Kyiv
Сообщений: 643
Отправить сообщение для olexandr с помощью ICQ Отправить сообщение для olexandr с помощью MSN Отправить сообщение для olexandr с помощью Skype™
пиши в личку, могу дать пример
делал такое...

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

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 489
Отправить сообщение для Snut с помощью ICQ Отправить сообщение для Snut с помощью MSN Отправить сообщение для Snut с помощью Skype™
вот что вышло... однако опять не туда летит...

Код:
function zoomIn(t) {
	scaleStart = _root.mapCountry._xscale; // начальное скалирование
	scaleEnd = scaleStart * t; // конечное скалирование
	xStart = _root.mapCountry._x; // начальная X координата
	yStart = _root.mapCountry._y; // начальная Y координата
	var pointCenterStart:Object = {x: 400, y: 300}; // точка центра сцены для начального значения скалирования
	var pointCenterEnd:Object = {x: 400, y: 300}; // точка центра сцены для конечного значения скалирования
	trace("До скейла");
	mapCountry.globalToLocal(pointCenterStart); // переводим координаты центра сцены в координаты mapCountry (mapCountry._xscale = mapCountry._xscale) 
	trace(pointCenterStart.x);
	trace(pointCenterStart.y);
	_root.mapCountry._xscale = scaleEnd; // скалируем в конечный zoom
	trace("После скейла");
	mapCountry.globalToLocal(pointCenterEnd); //  переводим координаты центра сцены в координаты mapCountry (mapCountry._xscale = mapCountry._xscale * t)
	trace(pointCenterEnd.x);
	trace(pointCenterEnd.y);
	deltaX = pointCenterEnd.x - pointCenterStart.x; // разность между точками X центра сцены до и после скалирования
	deltaY = pointCenterEnd.y - pointCenterStart.y; // разность между точками Y центра сцены до и после скалирования
	_root.mapCountry._xscale = scaleStart; // Уводим в начальный скеил
	xEnd = xStart + deltaX; // вычисляем смещение по X
	yEnd = yStart + deltaY; // вычисляем смещение по Y
	trace("xStart: " + xStart);
	trace("yStart: " + yStart);
	trace("xEnd: " + xEnd);
	trace("yEnd: " + yEnd);
	trace("scaleStart: " + scaleStart);
	trace("scaleEnd: " + scaleEnd);
	var t1:Tween = new Tween(mapCountry, "_xscale", easeType, scaleStart, scaleEnd, framesCount, false);
	var t2:Tween = new Tween(mapCountry, "_yscale", easeType, scaleStart, scaleEnd, framesCount, false);
	var t3:Tween = new Tween(mapCountry, "_x", easeType, xStart, xEnd, framesCount, false);
	var t4:Tween = new Tween(mapCountry, "_y", easeType, yStart, yEnd, framesCount, false);
}
__________________
Работаю

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

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

Старый 24.09.2007, 20:53
Snut вне форума Посмотреть профиль Отправить личное сообщение для Snut Посетить домашнюю страницу Snut Найти все сообщения от Snut
  № 9  
Ответить с цитированием
Snut
 
Аватар для Snut

Регистрация: Jun 2005
Адрес: Москва
Сообщений: 489
Отправить сообщение для Snut с помощью ICQ Отправить сообщение для Snut с помощью MSN Отправить сообщение для Snut с помощью Skype™
всем спасибо, разобрался.
__________________
Работаю

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

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

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


 


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


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