Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   scale и drag. Увеличение изо с помощью ползунка (http://www.flasher.ru/forum/showthread.php?t=138907)

св.demien 19.04.2010 01:28

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

Код AS1/AS2:

if (mov_btn._x>90) {
        pic._xscale+=3;
        pic._yscale+=3;
}
if (mov_btn._x<70) {
        pic._xscale-=3;
        pic._yscale-=3;
 
}//То есть ползунку(mov_btn) указаны определенные координаты, и только потом выполняется эффект приближения/уменьшения.

Ползунок у меня кнопка в клипе, на кнопку написал следующее
Код AS1/AS2:

on (press) {
        startDrag("", false, 37, 348, 129, 348);
}
on (release, releaseOutside) {
        stopDrag();
        _x=80;
}//Здесь претензий не имею

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

samana 20.04.2010 03:17

Вложений: 1
Давай что бы научится писать код в кадрах попробуй следующее:
Новая сцена:

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

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

Код AS1/AS2:

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), отмаштабируй (уменьши) примерно до размеров флешки.
Добавь код:
Код AS1/AS2:

// Это тоже самое перетаскивание 
mapHolder.map.onPress = function() {
        startDrag(this);
};
 
mapHolder.map.onRelease = mapHolder.map.onReleaseOutside = function () {
        stopDrag();
};

3) Дальше увеличение карты... Будем увеличивать mapHolder. Изначало его _xscale и
_yscale равны 100. К этому значению будем добавлять значение slider._x. Ведь "_х" слайдера изменяется от 0 до 100.
Для этого пишем функцию...
Код AS1/AS2:

function scaleMap() {
        mapHolder._xscale = mapHolder._yscale = 100 + sliderHolder.slider._x * 10;
}

Теперь надо чтобы эта функция срабатывала только когда слайдер двигается. Для этого создаем интервал для этой функции когда нажали на слайдер, и отчищаем интервал когда отпустили.
Добавь к коду из пункта 1 строки, что бы было так:
Код AS1/AS2:

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,
Код AS1/AS2:

setInterval(scaleMap, 50);

Я так понял интервал поставлен для создания зацикливания ?
И можешь объяснить по поводу карты, мувик в мувике. Почему если будет один мувиклип он будет сдвигаться в бока?

samana 21.04.2010 19:58

Цитата:

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

Цитата:

И можешь объяснить по поводу карты, мувик в мувике. Почему если будет один мувиклип он будет сдвигаться в бока?
Будет двигаться в бок, потому что его точка трансформации остаётся на месте, и увеличение происходит относительно этой точки. А так как мы увеличиваем его родителя, точка трансформации которого всегда по середине экрана, то область видимая в данные момент на карте будет именно приближаться без сдвига. Ты может изменить строку
Код AS1/AS2:

function scaleMap() {
        mapHolder._xscale = mapHolder._yscale = 100 + sliderHolder.slider._x * 10;
}

на
Код AS1/AS2:

function scaleMap() {
        mapHolder.map._xscale = mapHolder.map._yscale = 100 + sliderHolder.slider._x * 10;
}

и увидишь что я имею ввиду.


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

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