PDA

Просмотр полной версии : Групповое зуммирование


Snut
20.03.2007, 00:39
Столкнулся с проблеммой, есть несколько объектов ориентированных относительно друг друга, каждый объект кликабелен, есть проблема, нада зазуммировать это, плавно, кнопкой, без разницы, закидовать в 1 мувиклип - толку - нет, ибо понятно дело становится некликабельно, сводить точки привязки все в одно место муторно ибо объектов > 150? програмно расставить - тож не судьба, подскажите как сделать, хотябы откуда начать, фак курил, поиск мучал, гугл не помог, хееелп, плиз.

etc
20.03.2007, 00:59
Для начала надо перестать курить что-то ещё, что суметь внятно объяснить, что вы хотите.

Snut
20.03.2007, 10:07
Для начала надо перестать курить что-то ещё, что суметь внятно объяснить, что вы хотите.

Попробую объяснить проще.

Есть карта мира, каждая страна должна быть кликабельна, но карта мира должна иметь функции зуммирования и передвижения, вот почему встал вопрос групового зуммирования....


function zoom(mc, scale) {
mc.onEnterFrame = function() {
mcX = mc._xscale;
mcY = mc._yscale;
speed = 0.1
if (mcX != scale) {
if (mcX<scale) {
mc._xscale += mc._xscale*speed;
mc._yscale += mc._yscale*speed;
}
else {
mc._xscale -= mc._xscale*speed;
mc._yscale -= mc._yscale*speed;
}
} else {
stop();
}
};
trace(mcX); //182.238997252842 вот такое выдает, с разными вариациями, вообщем нет целого числа, в чем моя ошибка?
}

but50.onRelease = function() {
zoom(usa, 50);
zoom(rus, 50);
zoom(jap, 50);
zoom(ger, 50);
zoom(aus, 50);
};
but100.onRelease = function() {
zoom(usa, 100);
zoom(rus, 100);
zoom(jap, 100);
zoom(ger, 100);
zoom(aus, 100);
};
but200.onRelease = function() {
zoom(usa, 200);
zoom(rus, 200);
zoom(jap, 200);
zoom(ger, 200);
zoom(aus, 200);
};

iNils
20.03.2007, 10:35
Поместить все в один клип и зумировать его, то есть предка.

Snut
20.03.2007, 10:45
Поместить все в один клип и зумировать его, то есть предка.

А разве будет кликабельно?
я вот что-то сомневаюсь....
но ща попробую

//кликабельно

оно дергается, не достигается точное значение, непойму из-за чего.... в чем моя ошибка... в ДНК - не принимается)

//Запутался с адресацией

есть объект map в нем куча мувиков (>150) как обратиться ко всем внутри map сразу? пробывал и map.call и map.apply не выходит.... помогитя...

etc
20.03.2007, 13:40
Зачем? Что не кликабельно? В map все кликабельно.
Какое точное значение?

Snut
20.03.2007, 14:50
Зачем? Что не кликабельно? В map все кликабельно.
Какое точное значение?

Ну чтож, разложу все по полочкам, дабы и самому не запутаться.
1) пихаем карту мира в мувик map, каждая страна мувиклипом, всяческие атрибуты типо всплывающей подсказки. ссылки на клик и т.п. работают
2)но осталась проблема группового зуммирования и масштабирования. Есть 5 кнопок, а именно: but25, but50, but100, but200, but400, при нажатии на любую из них мувик должен плавно масштабироваться с указаным на кнопке значением, реализовал вот так:


speed = 0.1
function zoom(mc, scale) {
mc.onEnterFrame = function() {
mcX = mc._xscale;
mcY = mc._yscale;
if (mcX != scale) {
if (mcX<scale) {
mc._xscale += mc._xscale*speed;
mc._yscale += mc._yscale*speed;
} else {
mc._xscale -= mc._xscale*speed;
mc._yscale -= mc._yscale*speed;
}
} else {
stop();
}
};
}

but25.onRelease = function(){
zoom(map, 25);
}

but50.onRelease = function(){
zoom(map, 50);
}
// ----**---- на все кнопки - почти одинаково.
but200.onRelease = function(){
zoom(map, 200);
}


ну таки чито, нажимаем на кнопачку (например 50%)все это масштабируется до значения 50%+-~3% и колыхается пытаясь увеличится или уменьшиться до 50% но мувик упорно не попадает четко в значение 50, хотя по логике - должен.

3) зачем мне лезть внутрь map? будет еще подгружаться XML который буит парсится и раскидывать ссылки по странам, учитывая их ID, но это не главное, нужно же еще реализовать перемещение карты влево, вверх, вниз, вправо, попытался реализовать следующим образом:
создал полупрозрачные кнопочки по краям карты и соответственно с именами scrLeft, scrUp и т.д. для них


scrLeft.onRollover = function(){
//вот тут то и возникает загвоздка, понятно ячто нада одновременно все клипы внутри map передвинуть на одно и тоже расстояние, но прописывать их каженную поименно - гикнешься, поэтому и задал вопрос как обратиться сразу ко всем мувикам внутри какого-то клипа, возможно ли это?
//ну а условие

this.map.не_знаю_как_обратиться.onEnterFrame = function(){
this.map.не_знаю_как_обратиться._x -= this.map.не_знаю_как_обратиться._x*speed;
}
}


просьба сильно не бить....

etc
20.03.2007, 14:56
Я бы вам посоветовал использовать класс Tween или его аналоги для этого. И во время выполнения твина блокировать кнопки масштабирования.

Snut
20.03.2007, 18:36
твин, ну как мысль..... но проще то так, помоему, нет?

etc
20.03.2007, 18:50
Лучше, а не проще.

Snut
20.03.2007, 21:00
Лучше как у меня или твином?

etc
20.03.2007, 21:37
Твином. У тебя неправильная логика и подход.

valvika
21.03.2007, 00:30
...масштабируется до значения 50%+-~3% и колыхается пытаясь увеличится или уменьшиться до 50% но мувик упорно не попадает четко в значение 50, хотя по логике - должен.....
2Snut. По какой логике?
Школьный курс Алгебры: Если величину увеличить на N%, а потом результат уменьшить на N%, то окончательный результат никогда не равен исходному.
Пример. Есть 100единиц. Увеличиваем на 20%, а потом уменьшаем на 20%. Получится в конце концов -96единиц.
ЗЫ. Если ты уроки алгебры в школе прогуливал, то "кто тебе доктор".:drinks:

Snut
21.03.2007, 03:05
2Snut. По какой логике?
Школьный курс Алгебры: Если величину увеличить на N%, а потом результат уменьшить на N%, то окончательный результат никогда не равен исходному.
Пример. Есть 100единиц. Увеличиваем на 20%, а потом уменьшаем на 20%. Получится в конце концов -96единиц.
ЗЫ. Если ты уроки алгебры в школе прогуливал, то "кто тебе доктор".:drinks:

А как жишь тады сделать? отлавливать ширину\высоту?

Snut
21.03.2007, 20:37
Ну вобщем сделал я и зумирование и передвижение и без потери качества, не знаю как в браузере будет, погляжу.... тут подкрался другой вопрос.... чет не получается...

вобщем так, пишу функцию для того чтобы если id = 1, то цвет заливки объекта внутри мувика mc был один если 0 то другой, вообщем-то на шв = 1 - много условий накладывается и кликабельность и прочее, но не суть. как изменить цвет? это вообще реально?


function сont(mc, id) {
if (id=1) {
map.mapscroll.mc.beginFill(006633);
map.mapscroll.mc.endFill();

map.mapscroll.mc.onRollOver = function(){
mc.beginFill(0x665544);
mc.endFill();
}
map.mapscroll.mc.onRollOut = function(){
mc.beginFill(0x006633);
}
map.mapscroll.mc.onPress = function(){
trace("A РАБОТАЕТ!!!")
}
map.mapscroll.mc.onRelease = function(){
//a = childNode
//getURL("a")
}
} else {
mc.color = 0x000033;
}

}


чето я помоему не то делаю.... помогитя....

etc
21.03.2007, 20:48
if (id==1) для начала.
А потом курить мануалы по Color.

Snut
21.03.2007, 22:27
if (id==1) для начала.
А потом курить мануалы по Color.

Курить согласен, не найдется ссылочки? желательно на русском....

// ни это ли юзать?) mc.setRGB(RGBA);

// помучался получилось вот что


function cont(mc, id) {
C = new Color(mc);
if (id == 1) {
mc.onEnterFrame = function() {
C.setRGB(0xFF9900);
//оранжевый
};
mc.onRollOver = function() {
C.setRGB(0x009966);
//зеленый
};
} else {
C.setRGB(0xF5F5F5);
//светло-серый
}
}
tellTarget (map.mapscroll) {
cont(us, 1);
cont(uk, 0);
}


но не работает(

__etc? в чем моя ошибка?(((

etc
22.03.2007, 13:33
function cont(mc, id) {
C = new Color(mc);
if (id == 1) {
mc.onRollOut = function() {
C.setRGB(0xFF9900);
//оранжевый
};
mc.onRollOver = function() {
C.setRGB(0x009966);
//зеленый
};
C.setRGB(0xFF9900);
} else {
C.setRGB(0xF5F5F5);
//светло-серый
}
}

cont(map.mapscroll.us, 1);
cont(map.mapscroll.uk, 0);

Snut
22.03.2007, 14:37
__etc, спасибо, работает, но не так как это необходимо.... не могу найти тривиальное решение для того чтобы эту переменную С сделать индивидуальной для каждого мувика, что пытался:


private var C:Color;
C = new Color(mc);


но как-то не так, мож по другому можно?

и еще заодно вопрос, у меня в мувике us 2 уровня 1 с заливкой, второй с контуром, как поменять цвет именно у заливки, возможно ли это? весь фаг уже перекопал, ткните носом пожалуйста....

или нада тупо в мувике надо делать 2 мува 1 с заливкой второй с контуром? // эт геморно как-то....(

etc
22.03.2007, 15:02
mc.c = new Color(mc);
Дальше придумаешь самостоятельно.

Snut
27.03.2007, 15:21
йиха, долго моя билась но так и не добилась нужного результата с.... ХМЛ... чет не могу своим мозгом допереть...
значитсо гружу хмл:


my_XML = new XML();
my_XML.load("/map.xml");
var a:Number = my_XML.status;
if (a != 0) {
trace('Загрузка XML не удалась');
} else {
trace(a);
}

//прогружается нормально, выдает 0, соответственно ХМЛ мой корректен

часть ХМЛ:


<?xml version="1.0" encoding="UTF-8"?>
<usa>
<id>1</id>
<alt>Соединенные штаты Америки</alt>
<link>#</link>
</usa>

<gbr>
<id>0</id>
<alt>Великобритания</alt>
<link></link>
</gbr>


далее сумасшедшия, в некотором роде, функция:


function cont(mc, ind) {
mc.C = new Color(mc);
if (id == 1) {
mc.onRollOut = function() {
mc.C.setRGB(0xFF9900);
//оранжевый
};
mc.onRollOver = function() {
mc.C.setRGB(0x009966);
//зеленый
};
mc.C.setRGB(0xFF9900);
} else {
mc.C.setRGB(0xF5F5F5);
//светло-серый
}
}



Как говориться, внимание вопрос :)
мне необходимо чтобы функция выискивала в ХМЛ блок с именем ind(gbr например) потом брала id (именно из этого блока) в зависимости от него задавала цвет и функциональность мувику, брала alt, тобишь подсказку как ее вставить - не проблема уже есть функция для подсказки, и соответственно


mc.onRelease = function(){
getURL(URL) //URL берется из блока link
}


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

lowka
27.03.2007, 15:41
йиха, долго моя билась но так и не добилась нужного результата с.... ХМЛ... чет не могу своим мозгом допереть...
значитсо гружу хмл:

my_XML = new XML();
my_XML.load("/map.xml");
var a:Number = my_XML.status;
if (a != 0) {
trace('Загрузка XML не удалась');
} else {
trace(a);
}

//прогружается нормально, выдает 0, соответственно ХМЛ мой корректен

Из вашего кода видно, что вы проверяете status пустого документа (у него status = 0). Хотите получить данные? Ждите окончания загрузки и все необходимые действия производите по onLoad.

Snut
27.03.2007, 16:28
Переделал

my_XML = new XML();
my_XML.load("/map.xml");
my_XML.onLoad = function(success) {
if (success) {
trace(this);
} else {
trace('Хрен те');
}
};


проблема заключается именно в поиске нужного блока....

вот попытка, но всеравно undefined


function cont(mc, ind) {
xmlStr = '<ind></ind>';
my_XML.parseXML(xmlStr);
rootNode = my_XML.firstChild;
idTag = rootNode.firstChild;
id = idTag.firstChild;
id.toString();
trace(id);
altTag = idTag.nextSibling;
alt = altTag.firstChild;
alt.toString();
trace(alt);
linkTag = altTag.nextSibling;
link = linkTag.firstChild;
link.toString();
trace(link);
mc.C = new Color(mc);
addTextHint(mc, alt, hintStyle);
//всплывающая подсказка
if (id == 1) {
mc.onRollOut = function() {
mc.C.setRGB(0xFF9900);
//оранжевый
};
mc.onRollOver = function() {
mc.C.setRGB(0x009966);
//зеленый
};
mc.C.setRGB(0xFF9900);
} else {
mc.C.setRGB(0xF5F5F5);
//светло-серый
}
}


:wacko:
В чем моя ошибка?

Пожалуйста помогите, ну ничерта не получается(((

//17:18
:yahoo:
Уже легче, что сделал:

загрузка ХМЛ:

var my_XML:XML = new XML();
my_XML.ignoreWhite = true;
my_XML.load("/map.xml");
my_XML.onLoad = function() {
if (success) {
trace('ЗагрузиЛося');
} else {
trace('Хрен те');
}
};


и соответственно функция:


function cont(mc, ind) {
my_XML.onLoad = function(){
xmlStr = '<ind></ind>'; // поидеи тут должен выбираться блок из которого вытаскиваются значения
parseXML(xmlStr);
rootNode = my_XML.firstChild;
idTag = rootNode.firstChild;
id = idTag.firstChild;
trace(id);
altTag = idTag.nextSibling;
alt = altTag.firstChild;
trace(alt);
linkTag = altTag.nextSibling;
link = linkTag.firstChild;
trace(link);
}
mc.C = new Color(mc);
//всплывающая подсказка
addTextHint(mc, alt, hintStyle);
//цвета
active = 0xFF9900
rollover = 0x009966
notActive = 0x66FFFF
if (id == 1) {
mc.onRollOut = function() {
mc.C.setRGB(active);
//оранжевый
};
mc.onRollOver = function() {
mc.C.setRGB(rollover);
//зеленый
};
mc.C.setRGB(active);
} else {
mc.C.setRGB(notActive);
//светло-серый
}
}
//Присовываем функцию всем странам
cont(map.mapscroll.usa, usa);
cont(map.mapscroll.gbr, gbr);

Snut
27.03.2007, 18:52
__etc, помогиииии пожалуйста.... ну не могу я понять фаг....

etc
27.03.2007, 19:19
__etc, помогиииии пожалуйста.... ну не могу я понять фаг....
Сидите и ждите ответа. Следующий подобный пост будет сочтен за ап и флуд.

Snut
28.03.2007, 00:18
Выкладываю на всяк случай исходник

к форуму не лепится (112Кб), качать тут Исходник (http://snut.narod.ru/map_020.zip)

Snut
28.03.2007, 23:37
и нет ни одного человека который мне поможет?(((( ___etc доставай свой плюсомет, заплюсь меня....

Snut
30.03.2007, 13:44
вопрос в следующем, как сказать флешу чтобы он брал данные из определенного узла с уникальным именем, например gbr, причем не атрибуты его читал, а вложеные узлы. Загвоздка то собсно в этом.... в хмл примерно 180 уникальных имен, и надо сделать это функцией, помощь нужна только в том чтобы обратиться к нужному узлу остальное сделаю.