PDA

Просмотр полной версии : scale и drag. Увеличение изо с помощью ползунка


св.demien
19.04.2010, 01:28
Всем привет. Помогите разобраться. Интересует следующее http://www.fotomaps.net/demo/
(Закройте окно, и наверху есть ползунок...)
Каким образом это все происходит, я написал что смог, вот

if (mov_btn._x>90) {
pic._xscale+=3;
pic._yscale+=3;
}
if (mov_btn._x<70) {
pic._xscale-=3;
pic._yscale-=3;

}//То есть ползунку(mov_btn) указаны определенные координаты, и только потом выполняется эффект приближения/уменьшения.

Ползунок у меня кнопка в клипе, на кнопку написал следующее
on (press) {
startDrag("", false, 37, 348, 129, 348);
}
on (release, releaseOutside) {
stopDrag();
_x=80;
}//Здесь претензий не имею

Это все не правильно, конечно. Как сделать увеличение/уменьшение без указание координат ползунку, а так как в примере? Зараннее благодарю.

samana
20.04.2010, 03:17
Давай что бы научится писать код в кадрах попробуй следующее:
Новая сцена:

1)Создай слайдер. Это мувиклип (можно без графики)(sliderHolder) в котором ещё один мувиклип ввиде ползунка (slider). slider ровно по центру (_x=0,_y=0)

На главной сцене в кадре


sliderHolder.slider.onPress = function() {
startDrag(this, false, 100, 0, 0, 0);

};
sliderHolder.slider.onRelease = sliderHolder.slider.onReleaseOutside = function () {
stopDrag();

};

2)Создание карты. Это опять мувиклип (пустой)(mapHolder) в нем сама карта (мувиклип map). Точки трансформации обеих клипов по середине. Двигать будем клип map, а увеличивать его родителя mapHolder, что бы при увеличении карта не сдвигалась в бока и приближалась всегда к середине экрана. Когда перетащишь из библиотеки mapHolder, но отцентрируй по середине, а вложенную в него карту (map), отмаштабируй (уменьши) примерно до размеров флешки.
Добавь код:
// Это тоже самое перетаскивание
mapHolder.map.onPress = function() {
startDrag(this);
};

mapHolder.map.onRelease = mapHolder.map.onReleaseOutside = function () {
stopDrag();
};
3) Дальше увеличение карты... Будем увеличивать mapHolder. Изначало его _xscale и
_yscale равны 100. К этому значению будем добавлять значение slider._x. Ведь "_х" слайдера изменяется от 0 до 100.
Для этого пишем функцию...
function scaleMap() {
mapHolder._xscale = mapHolder._yscale = 100 + sliderHolder.slider._x * 10;
}
Теперь надо чтобы эта функция срабатывала только когда слайдер двигается. Для этого создаем интервал для этой функции когда нажали на слайдер, и отчищаем интервал когда отпустили.
Добавь к коду из пункта 1 строки, что бы было так:
sliderHolder.slider.onPress = function() {
startDrag(this, false, 100, 0, 0, 0);
var int_scaleMap = setInterval(scaleMap, 50);//запуск интервала каждые 50 мсек
};

sliderHolder.slider.onRelease = sliderHolder.slider.onReleaseOutside = function () {
stopDrag();
clearInterval(int_scaleMap);// остановка интервала
};

св.demien
20.04.2010, 19:44
Благодарствую :) От души!

samana
21.04.2010, 00:23
Спасибо!

св.demien
21.04.2010, 07:30
samana, setInterval(scaleMap, 50);
Я так понял интервал поставлен для создания зацикливания ?
И можешь объяснить по поводу карты, мувик в мувике. Почему если будет один мувиклип он будет сдвигаться в бока?

samana
21.04.2010, 19:58
Я так понял интервал поставлен для создания зацикливания ?
Да, функция scaleMap срабатывает каждые 50 мсек.

И можешь объяснить по поводу карты, мувик в мувике. Почему если будет один мувиклип он будет сдвигаться в бока?
Будет двигаться в бок, потому что его точка трансформации остаётся на месте, и увеличение происходит относительно этой точки. А так как мы увеличиваем его родителя, точка трансформации которого всегда по середине экрана, то область видимая в данные момент на карте будет именно приближаться без сдвига. Ты может изменить строку
function scaleMap() {
mapHolder._xscale = mapHolder._yscale = 100 + sliderHolder.slider._x * 10;
}
на
function scaleMap() {
mapHolder.map._xscale = mapHolder.map._yscale = 100 + sliderHolder.slider._x * 10;
}
и увидишь что я имею ввиду.