Форум 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)
-   -   scroolbar и startDrag (http://www.flasher.ru/forum/showthread.php?t=112976)

Kroli4eg 14.06.2008 18:10

scroolbar и startDrag
 
Доброго времени суток. Мне нужно создать что то на подобие скрулбара, водя за бегунок которого масштаб объекта увеличивается - уменьшается. Делаю так
Код:

scrool_mask.onPress = function()
{
  ScroolBar.startDrag(true, 501.9, 153, 501.9, 53);//peredvezenie polzunka
  polzunok =  scrool_counter - ScroolBar._y; //opredelenie maswtaba figuri
  polzunok_plus(polzunok);//peredaem maswtab v funkciu
}
scrool_mask.onRelease = scrool_mask.onReleaseOutside = function()
{
  ScroolBar.stopDrag();
}

Ни как не могу побороть зпазадание в масштабировании. Т.е. я когда по бегунку кликаю, бегунок передвигается, а координаты его передаются старые, и мне надо еще раз кликать что бы операция прошла успешно. И еще ни как не могу заставить менять масштаб во время перетаскивания бегунка. Что посоветуете отказатся от startDrag и сделать через привязку к координатам мыши или можно как нибудь этот код до ума довести?

MrPoma 14.06.2008 23:27

Код:

scrool_mask.onPress = function(){
        this.onMouseMove = function(){
                ScroolBar.startDrag(true, 501.9, 153, 501.9, 53);//peredvezenie polzunka
                polzunok =  scrool_counter - ScroolBar._y; //opredelenie maswtaba figuri
                polzunok_plus(polzunok);//peredaem maswtab v funkciu
        }
}

scrool_mask.onRelease = scrool_mask.onReleaseOutside = function(){
        ScroolBar.stopDrag();
        delete this.onMouseMove;
}


Kroli4eg 15.06.2008 10:21

Спасибо помогло. И всетаки из-за чего происходит задержка в срабатывании, потому что событие stopDrag еще не произошло или это так событие onPress так работает?

Psycho Tiger 15.06.2008 11:11

По сути, координаты - это то, что мы видим на экране. То есть флэш пока не подвинет на экране, координаты не изменяться.
Экран он обновляет когда выполняется весь скрипт. То есть
Код:

ScroolBar.startDrag(true, 501.9, 153, 501.9, 53);//peredvezenie polzunka
  polzunok =  scrool_counter - ScroolBar._y; //opredelenie maswtaba figuri
  polzunok_plus(polzunok);//peredaem maswtab v funkciu

Этот скрипт выполняется, после обновляется экран, а значит, и координаты.
Можно принудительно перерисовать экран вот этой ф-цией:
Код:

updateAfterEvent();

Kroli4eg 15.06.2008 12:53

У меня так не получилось. :-( Все равно идет запаздание. Т.е. во время клика до отпускания клавиши мыши координаты одной фигуры не пересчитываются относительно другой. Может у меня в коде ошибка?
Код:

small_move = function ()//funkciya peredvizeniya odnogo ob'ekta otnositel'no drugogo
{
  ax = bigmap._width/221;
  bigmap._x = ram_test._width*ax/2 - (ram_test._x - 640)*ax + 5.2;
  bigmap._y = ram_test._height*ax/2 -(ram_test._y - 100)*ax + 15.55;
}

smallmap.onPress = function()
{
 coords();
 ram_test.startDrag(true, cs3, cs2 + 0.1, cs4, cs1);
 updateAfterEvent();
 onMouseMove = small_move;
 small_move(); // vizov etoy funkcii srabativaet so starimi koordinatami
 updateAfterEvent();
}

smallmap.onRelease = smallmap.onReleaseOutside = function()
{
  onMouseMove = null;
  ram_test.stopDrag();
}

В итоге сделал так:
Код:

smallmap.onPress = function()
{
 coords();
 ram_test.startDrag(true, cs3, cs2 + 0.1, cs4, cs1);
 onMouseMove = small_move;
 timerID = setInterval(small_move, 10);
}

smallmap.onRelease = smallmap.onReleaseOutside = function()
{
  onMouseMove = null;
  ram_test.stopDrag();
  clearInterval(timerID);
}

Но тут возникли новые проблемы:
1. Эта функция вызывает мою функцию с переодичностью(чего мне не надо)
2. Как будет выглядить запись если мне нужно будет передавать в мою функцию какое нибуть значение

MrPoma 15.06.2008 13:06

Код:

small_move = function ()//funkciya peredvizeniya odnogo ob'ekta otnositel'no drugogo
{
  ax = bigmap._width/221;
  bigmap._x = ram_test._width*ax/2 - (ram_test._x - 640)*ax + 5.2;
  bigmap._y = ram_test._height*ax/2 -(ram_test._y - 100)*ax + 15.55;
}

Очень странно Вы находите координату Y, используя ax :wacko:

Kroli4eg 15.06.2008 13:40

Цитата:

Сообщение от MrPoma (Сообщение 745703)
Код:

small_move = function ()//funkciya peredvizeniya odnogo ob'ekta otnositel'no drugogo
{
  ax = bigmap._width/221;
  bigmap._x = ram_test._width*ax/2 - (ram_test._x - 640)*ax + 5.2;
  bigmap._y = ram_test._height*ax/2 -(ram_test._y - 100)*ax + 15.55;
}

Очень странно Вы находите координату Y, используя ax :wacko:

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

MrPoma 15.06.2008 14:13

Ширина на ширину и высота на ширину.


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

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