Форум 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)
-   -   Скролл. Добавление эффекта плавного торможения (http://www.flasher.ru/forum/showthread.php?t=151500)

Improveddesign 28.02.2011 22:46

Скролл. Добавление эффекта плавного торможения
 
Здравствуйте, меня зовут Руслан и скажу сразу, лукавить не стану по-поводу моих знаний в AS, как многие здесь ищущие помощь, что якобы код они сами написали.
Я дизайнер, Photoshop и Corel - вот мои подручные средства пр создании оригинал-макетов, но буквально несколько месяцев назад начал изучать (правда поверхностно из-за отсутствия времени) технологию Flash и скажу честно... очень понравилось и стал привлекать AS с каждым днем все больше и больше.:rolleyes:
Писать сам код я не умею (думаю вопрос времени), но уже что-то могу понять при его чтении. В основном помогают исходники и уроки этого форума.

Проблема у меня состоит в следующем:
Есть у меня следующий код скролла, работает отменно, НО хотелось бы внедрить и эффект плавного торможения текста. С другого исходника нашел три строки, которые отвечают именно за данный эффект. Немного, повозившись с ним, пришел к почти желаемому результату, подчеркну "почти", но проблема в том что появился плавный эффект не только у динамического текстового поля, но и всего мувика.
Ниже приведен код, а три комментированные строки в нем и есть те строчки, отвечающие за эффект плавного торможения. Помогите пожалуйста, очень прошу, больше низнаю кому можно обратиться. Я человек благодарный и могу также, при необходимости помочь например с дизайном.

pole - динамическое текстовое поле, подгружающий данные из XML файла
drag - сам ползунок

Код AS1/AS2:

_root.onEnterFrame = function() {
pole._y = -((pole._height-150)/XodPolzuna*drag._y);
// я уверен, что нижние (закоментированные) три строки должны быть именно здесь, т.к при их редактировании почти достигается желаемый эффект.
// targY = 0;
// targY = -dragger._y*scrollAmount;
// this._y -= (this._y-targY)/4;
};
drag.pres = false;
drag.onPress = function() {
if (pole._height>150) {
 this.pres = true;
 this.startDrag(false, 150, 0, 150, XodPolzuna);
}
};//onPress
drag.onMouseUp = function() {
if (this.pres) {
 this.pres = false;
 this.stopDrag();
}
};


Hauts 01.03.2011 10:43

Все достаточно просто: если у вас есть формула расчета положения поля по _y, то можно сделать плавное перемещение по такому принципу:

поле._y += (нужное_положение_по_у - поле._y) / коэффициент_торможения

Где коэффициент_торможения — число от 1 (при 1 не тормозит).

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

По вашему коду как-то так должно быть:
Код AS1/AS2:

_root.onEnterFrame = function() {
    var posY = -((pole._height-150)/XodPolzuna*drag._y);
    pole._y += (posY - pole._y) / 3;
};

Что касается неправильного эффекта, который вы описали ("плавный эффект не только у динамического текстового поля, но и всего мувика"), это из-за того, что в функции _root.onEnterFrame строка "this._y -= (this._y-targY)/4" ссылается на _root. Иными словами в этой функции this = _root, а должна быть ссылка на проматываемое поле.

Improveddesign 01.03.2011 22:06

Огромнейшее Вам человеческое СПАСИБО!!! Действительно, все очень просто и предельно ясно.
Это просто замечательно, что на свете встречаются такие люди, как Вы... способный помочь и имеющий на это желание. Обычно с высока (прозженые прогеры) смотрят на людей, которые делают только первые шаги в освоении AS и Flash, соответственно, направляя всякий раз на мануал. Как я и писал чуть выше... я человек благодарный и, хотелось бы сделать для Вас что-нибудь хорошее. Если Вас интересуют услуги дизайнера, то я буду рад Вам помочь.
Знаете, не хотелось бы казаться нагловатым, но хотелось бы задать еще пару вопросов, которые беспокоят меня относительно этого же скролла. Если я получу на них ответ, моей радости не будет предела и я начну двигаться дальше в изучении actionscript.

Вопрос №:1
Я уверен, что можно реализовать код таким образом, чтобы размер ползунка варьировался в зависимости от полноты текста, загруженного из XML, то есть чем больше текста, тем меньше по оси._y сам ползунок, и нашел следующее...
Код AS1/AS2:

высота_ползунка = высота_скролла / высота_всего_текста * высота_видимого_текста
если высота_ползунка больше высота_скролла то высота_ползунка = высота_скролла
сдвиг_текста = высота_всего_текста / (высота_скролла - высота_ползунка) * скролл_у

Непонятные мне вещи:
Высота ползунка = drag._y
Высота_скролла = XodPolzuna
Высота_всего_текста = pole._height
Высота_видимого_текста = тоже чтоли pole._height ???
Сдвиг_текста = ???

2. Вопрос №2
Вопрос по кнопкам. Как реализовать не знаю, вернее знаю события onPress, onrelease и т.д. а дальше полный стопр.
Заранее большое спасибо!

Hauts 02.03.2011 22:14

Вложений: 1
Спасибо, мы все когда-то начанали :)

Я вам пример подготовил, думаю на ваши вопросы вы найдете решение.

Вложение 26120

Относительно задачи — все сводится к простым математическим пропорциям. Высота ползунка, если вдуматься, — настолько же меньше, чем высота всей области прокрутки, насколько показываемая область текста меньше той, что остается невидимой. Вот.

Еще один момент.
Высота мувиклипа во флэше — это свойство _height.
Его положение по вертикали — свойство _y.
Масштаб по вертикали (изначально равен 100) — свойство _yscale.

Тоже самое относится и к горизонтальным свойствам, но там, соответственно уже "_width", "_x" и "_xscale".

Improveddesign 02.03.2011 22:21

Спасибо большое, уже начал изучать...


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

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