Просмотр полной версии : Ограничение значений переменной
Acrossfy
07.10.2009, 22:37
Здравствуйте. Есть вот такой код:
counter = 0;
mouse = new Object();
mouse.onMouseWheel = function(delta) {
counter += Math.abs(delta)/delta*(-1);
trace(counter);
};
Mouse.addListener(mouse);
Можно ли задать для переменной ограничение возможных значений? Например, чтобы счетчик не принимал значения больше 11, либо меньше 0?
Заранее спасибо.
А что у вас затруднение вызывает-то?
if (counter < 11 && counter > 0) {
//делаем что-то, связанное с counter
counter += Math.abs(delta)/delta*(-1);
}
Только, прошу заметить, что delta меняется в функции onMouseWheel шагами по 3. Ну вы, наверное, об этом знаете.
Так что лучше разбить условный оператор на две части и дописать в их else выражениях приравнивание счетчику крайних значений, когда счетчик к ним близок.
Acrossfy
08.10.2009, 00:43
Именно так я и сделал с самого начала, точнее немного не так, но похоже. Ваш пример не работает. Изначально counter равен нулю, поэтому условие не сработает. А если начальное значение не задать, то ничего не заработает далее.
Я же делал иначе, сначала писал вычисление counter`a, а ниже условие при каких его значениях должно работать ниже приведенное. Так вот, "ниже приведенное" отлично работает при тех значениях - от нуля до одиннадцати, однако если мышь продолжать крутить, счетчик продолжает накручиваться. И поэтому когда долго крутишь коунтер переваливает за 11 и может накрутиться до 45, 100 и т.д. Начинаешь крутить колесо обратно - счетчик так же постепенно начинает "скручиваться" обратно, однако пока докрутишь колесо до значения меньшего 11-ти, при котором условие срабатывает может пройти время. Получится довольно долгая задержка перед тем, как произойдет действие реагирующее на уменьшее counter`a в диапазоне от 11 до 0.
Вот. Поэтому мне нужно, чтобы вне зависимости от того насколько дальше прокручено колесо, конечно значение счетчика оставалось на месте, и при кручении колеса в обратную сторону тут же начинало скручиваться.
Добавлено через 2 минуты
Если, как вы написали, при достижении крайних значений сделать условие и приравнивание, то да. Я так тоже делал.. Трейс покажет, что значение по прежнему 11, однако подсчет оборотов колеса все равно будет идти, и трейс не покажет нам сколько оборотов после 11 колесо прошло, и сколько нужно "обратно" чтобы было действительно 11 от начала момента кручения, таким образом опять получится задержка.
Вообще, я не ставил целью показать готовый работающий пример, а просто показал, как проверять крайние значения.
Что касается работы с колесиком мыши, то вот пример у меня есть, меняю масштаб карты в одном проекте:
var mouseListener = new Object();
mouseListener.onMouseWheel = function (wheel) {
if (wheel > 0) {
if (mapMC._xscale < 350) {
mapMC._xscale = mapMC._xscale + 25;
mapMC._yscale = mapMC._yscale + 25;
}
}
else if (mapMC._xscale > 100) {
mapMC._xscale = mapMC._xscale - 25;
mapMC._yscale = mapMC._yscale - 25;
}
};
Mouse.addListener(mouseListener);
Как видите, счетчиков я тут не использую, а сразу работаю с изменяемым свойством.
То есть, колесико может крутиться себе и дальше, но приращение масштаба происходит не будет.
Вместо свойства масштаба можно взять также какую-то переменную и также ее увеличивать - уменьшать.
Вам следует также использовать два вложенных условия - одно проверяет, куда крутится колесико, а второе - вышло или нет значение счетчика за предел.
Так следует делать, потому что для каждого случая будут разные действия.
Acrossfy
15.10.2009, 02:29
mooncar, извиняюсь за столь долгую задержку, были проблемы с оборудованием. Огромное вам спасибо за помощь, собственно на основе вашего предложения и сделал, спасибо.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.