![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Вопрос больше не по програмированию а по проектированию. Сталкнулся со следующей задачей: Есть внешний мувик внутри него 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
}
__________________
Работаю |
|
|||||
|
Вот что получилось на данный момент... но координаты не получаются те что нужны... не получается их вытащить.... помогите разобраться пожалуйста.
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);
}
__________________
Работаю |
|
|||||
|
Вот исходник, первый переход происходит нормально, а дальше все уползает черти куды... не могу понять в чем ошибка, точнее могу понять но не получается исправить... нужно нормально расчитать финальные координаты... Но мой мозг что-то это делать не хочет...
__________________
Работаю |
|
|||||
|
вы правильно стали копать в направлении перевода локальных координат в глобальные... вот так должно работать
![]() |
|
|||||
|
есть кнопки + и - для них есть следующее:
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;
}
};
при нажатии на + объект вне зависимости от положения должен увеличиваться в 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);
}
__________________
Работаю |
|
|||||
|
пиши в личку, могу дать пример
делал такое... |
|
|||||
|
вот что вышло... однако опять не туда летит...
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);
}
__________________
Работаю |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
К сожалению, я сейчас шибко занят чтоб разбираться с Вашим кодом. Но если Вас не затруднит разобраться с моим, то решение найдется.
Там сначала может показаться что это не то, но на самом деле тоже центр - выделенной для увеличения области - помещается после увеличения в центр области просмотра (маски). Само зуммирование в конце кода. Удачи.
__________________
Reality.getBounds(this); |
|
|||||
|
всем спасибо, разобрался.
__________________
Работаю |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|