PDA

Просмотр полной версии : Увеличение (zoom) мувиклипа (_mc)


selahssea
13.05.2010, 01:44
Добрый день
Помогите разобраться в ситуации.
Значицца есть Какойто_мувиклип с определенными кнопками в нем:
кнопки эти в примере выводят в динамиктекстфилд каждая свой текст.
Поверх этого всего есть две кнопки зума (увеличения_бтн/уменьшения_бтн) по нажатию на увеличение_бтн - естественно Какойто_мувиклип увеличивается и появляется возможность его перетаскивать, и естсественно кнопки которые внутри этого Какогото_мувиклипа не работают, когда нажимаешь кнопку уменьшить_бтн естсетвенно присходит уменьшение какогото_мувиклипа, НО!!! Возможность нажатия на кнопки внутри какогото_мувиклипа не возвращается, а его все так же можно продолжать таскать, помогите разобраться пожалуйста. Может есть какой то специальный способ типа вернуть фокус какомуто_мувиклипу или что то такое.

Вот код в первом и единственном кадре всей сцены:
IntervalNumber = setInterval(checkScale, 35);
function checkScale()
{
if (homer_mc._xscale != 100 && homer_mc._yscale != 100)
{
homer_mc.homer_pix_mc.onPress = function()
{
startDrag(this);
};
homer_mc.homer_pix_mc.onRelease = function()
{
stopDrag();
};
}
else
{
}
};

Вот код увеличение_бтн:
on(release)
{
homer_mc._xscale += 50;
homer_mc._yscale += 50;
}

и уменьшения_бтн:
on(release)
{
if(homer_mc._xscale <= 100 && homer_mc._yscale <= 100)
{

}
else
{
homer_mc._xscale -= 50;
homer_mc._yscale -= 50;
}
}

Исходник прилагается

Contemplator
13.05.2010, 13:01
ладно, придираться не буду... но... на кой фиг пустой else? =))
это первое, ну а второе: startDrag(this), а stopDrag() - понятное дело что перетаскиваться _mc будет и дальше =)
ну и проименуй кнопки да пропиши к ним инструкции всё в том же фрейме - так гораздо проблемней запутаться... ну и ещё порадовало очень:
if(homer_mc._xscale <= 100 && homer_mc._yscale <= 100)
{
}
else
{
homer_mc._xscale -= 50;
homer_mc._yscale -= 50;
}
/*А нормально то if никак не прописать, с нормальными условиями,
что б не было необходимости создавать else?
действие-то должно у тебя происходить только в одном случае =))*/

selahssea
13.05.2010, 16:10
Про ИФ спасибо, ступил, исправлю. а вот про стратдраг и стопдраг я не понял. Подскажите что нужно поменять что бы не перетаскивалось

Добавлено через 22 минуты
Вот поправил код, надеюсь теперь нормально выглядит, и приятней помогать ))
IntervalNumber = setInterval(checkScale, 35);
function checkScale()
{
if (homer_mc._xscale != 100 && homer_mc._yscale != 100)
{
homer_mc.homer_pix_mc.onPress = function()
{
startDrag(this);
};
homer_mc.homer_pix_mc.onRelease = function()
{
stopDrag();
};
homer_mc.homer_pix_mc.onReleaseOutside = function()
{
stopDrag();
};
}

};
zoomIN_btn.onRelease = function()
{
homer_mc._xscale += 50;
homer_mc._yscale += 50;
}
zoomOUT_btn.onRelease = function()
{
if(homer_mc._xscale > 100 && homer_mc._yscale > 100)
{
homer_mc._xscale -= 50;
homer_mc._yscale -= 50;

}
}

Contemplator
13.05.2010, 17:09
компилятор запускать в лом, если правильно помню:
stopDrag (this) =))

selahssea
13.05.2010, 21:50
Помните, к сожалению, не правильно, компилятор даже подсказывает, что stopDrag(); без параметров пишется, да и вопрос у меня не в этом.
Вы по-видимому решили что у меня когда отпускаешь мышь, то объект дальше продолжает таскаться за курсором - но это не так.
Мышь у меня нормально отпускает и снова потом можно схватить мувиклип. А хочу я сделать так что бы когда Мувиклип после увеличения кнопкой зума, вернули в первоначальный размер , он становился активным и те кнопки которые внутри этого мувиклипа, тоже работали, а они не работают, и мувиклип по прежнему можно взять и тащить мышкой.
Если не сложно посмотрите исходник который прикреплен к первому сообщению, и сразу поймете о чем я говорю

in4core
13.05.2010, 21:53
this.stopDrag();

selahssea
13.05.2010, 21:56
this.stopDrag();
Проблема совсем не в этом

AzagThoth
13.05.2010, 23:52
delete homer_mc.homer_pix_mc.onPress;
delete homer_mc.homer_pix_mc.onRelease;

Добавлено через 2 минуты
Кнопочные обработчики(когда они уже не нужны естественно) - нужно беспощадно удалять.

samana
14.05.2010, 00:21
Не могу открыть ваш файл из первого поста.

selahssea
14.05.2010, 00:29
Вот поновее файл перезалил в это сообщение.

А этот код только запретил перетаскивание, но кнопки внутри мувиклипа не активировал.
delete homer_mc.homer_pix_mc.onPress;
delete homer_mc.homer_pix_mc.onRelease;

AzagThoth
14.05.2010, 00:30
Ну он код привёл же. Ясно видно, что после создания обработчиков - он их не удаляет когда они больше не нужны.

Добавлено через 2 минуты
IntervalNumber = setInterval(checkScale, 35);
function checkScale()
{
if (homer_mc._xscale != 100 && homer_mc._yscale != 100)
{
homer_mc.homer_pix_mc.onPress = function()
{
startDrag(this);
};
homer_mc.homer_pix_mc.onRelease = function()
{
stopDrag();
delete homer_mc.homer_pix_mc.onPress;
delete homer_mc.homer_pix_mc.onRelease;
};
}
else
{
}
};
onMouseMove = function ()
{
updateAfterEvent();
};
Код не оптимизирован.

Добавлено через 6 минут
Просто скопируйте то что я написал и всё будет как надо.

selahssea
14.05.2010, 02:29
или может быть это вааще по другому надо делать?

AzagThoth
14.05.2010, 03:03
Да. Лучше делать по другому.

Добавлено через 5 минут
Принцип например такой. Проверяйте масштабируемость при нажатии кнопок для увеличения/уменьшения. Если размер приблизился к оригинальному - смело помещайте мувик по центру сцены. И тут же удаляйте обработчики кнопочных событий для мувиклипа - homer_mc.homer_pix_mc
В данном случае setInterval не нужен в принципе. Впрочем onMouseMove Вам тоже, на мой взгляд не нужен. В общем Ваш код можно и желательно уменьшить раза в 2 на мой взгляд убрав лишние и совершенно не нужные действия.

И ещё. Не пишите код в коде кнопок - как Вы это делаете сейчас.

selahssea
15.05.2010, 02:04
Ну ей богу, не помогает ни удаление обработчиков, ни онМаусМув. Все равно фокус к мувиклипу с кнопками не возвращается.

Добавлено через 1 минуту
Может я что не так объяснил, может моя проблема не понятна толком, я могу переобъяснить, если что хотя наверно проще открыть файл и посмареть что не так

in4core
15.05.2010, 03:02
onMouseMove = function ()
{
updateAfterEvent();
};

Что это ? Точнее в чем фишка ?

это одно и тоже что

var с = 0;

function a() {
trace(c);
}
a();
Вообщем бред

AzagThoth
15.05.2010, 05:41
selahssea я не ставил своей целью сделать Ваш код безупречно рабочим. Это Вам, наверное, всё таки лучше сделать самому. То что я написал выше и предложил Вам использовать - это всего лишь пример который идёт в ногу с тем как Вы начали это дело реализовывать. То есть пример неоптимальный в принципе. Если Вы сомневаетесь, что оно работает - то могу сказать наверняка - работает. Я скачивал исходник прикриплённый к первому сообщению данной темы и можете не сомневаться проверил то что писал.
Другой вопрос о том стоит ли так делать? - Нет не стоит.
Я не стал переписывать Ваши условия и менять структуру кода. Но они как я уже успел выразиться - не очень в тему вообще. Если хочется понять в какую сторону смотреть, то я бы рекомендовал Вам перечитать сообщение под номером 13 данного топика.

selahssea
15.05.2010, 13:10
AzagThoth, про реализацию другую я понял, обязательно переделаю по-нормальному.
А вот про работоспособность кода - у меня на пример не работает, как я уже писал: Возможность перетаскивания отключается, но внутри две кнопки - серая и красная - они не возвращаются к работоспособному состоянию. Може я что то не так делаю, вы не могли бы показать мне переделанный исходник из первого сообщения?

Добавлено через 3 минуты
Ан нет, прошу порщения действительно работает, спасибо Большое за хелп!