Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   переключение счетчика, а как делаете вы? (http://www.flasher.ru/forum/showthread.php?t=152488)

in4core 18.03.2011 14:10

переключение счетчика, а как делаете вы?
 
Вот есть такая задача - координата x растет от 0 до 100, как только доходит до 100 возвращается до 0.

Код AS3:

function test():void  {
 
 if(x >= 0 && _state == 'forward' )  x ++ ,  if ( x >=100 ) x = 100 , _state = 'backward';
 else x -- , if ( x == 0 ) _state = 'forward' ;
 
}

Мне кажется чейто, что есть более удобная реализация и короткая. Вообщем как делаете вы ?

iNils 18.03.2011 14:28

Код AS3:

var _state:int = 1;
var minX:int = 0;
var maxX:int = 10;
function test ():void  {
        x+=_state;
        if (x < minX) {
                x = minX;
                _state *=-1;
                x += _state;
        } else if (x > maxX) {
                x = maxX;
                _state *=-1;
                x += _state;
        }
        trace (x, _state)
}
for (var i:int = 0; i< 40;i++) {
        test();
}


silin 18.03.2011 14:39

Код AS3:

function test(event:Event):void  
{
        if ((x+= _step) == 100 || x == 0) _step *= -1;
}


iNils 18.03.2011 14:48

Силин победил) Но так будет работать не всегда, если прирост будет равен 3, то == 100 не будет

in4core 18.03.2011 15:01

iNils а в чем разница твоего и моего подхода ? Ну а насчет прироста в 3 можно >= поставить , не ?

i.o. 18.03.2011 15:11

Цитата:

Сообщение от in4core (Сообщение 981551)
iNils а в чем разница твоего и моего подхода ?

В том, что в математике не нужны строковые значения)

iNils 18.03.2011 15:19

Цитата:

iNils а в чем разница твоего и моего подхода ?
Меньше проверок и телодвижений. Более гибкий код, можно менять границы и шаги.
Цитата:

Сообщение от in4core (Сообщение 981551)
Ну а насчет прироста в 3 можно >= поставить , не ?

Тогда все равно нужно компенсировать уход за пределы. Иначе будет значение 102, вместо 100.

in4core 18.03.2011 15:22

Цитата:

Меньше проверок и телодвижений. Более гибкий код, можно менять границы и шаги.
Да, но, дело в том, что меня именно как раз интересовал подход *меньше строк*, да ваш код я понимаю в плане гибкости, но интересно было именно как можно короче все описать

alexcon314 18.03.2011 15:23

Если прям-таки уж линейность движения необязательна и нужна цикличность (хотя и без нее можно), можно обычным косинусом/синусом координату считать с нужными параметрами. Дольше? Пожалуй... Но просто: x = X*cos(intCount); координата "сама" меняется без всяких ифов в пределах [-X;X]. Можно поискать и другие функции. Одна строка, как вы и хотели. Поднастроить - нет проблем. Поменять коэффициентики и все.

silin 18.03.2011 15:48

>>Иначе будет значение 102, вместо 100.
попасть в 100 стартуя из 0 с шагом 3 вообще мудрено
тока если дробить каждый шаг
Код AS3:

private var _step:Number = 1;
private function test(event:Event):void 
{
        for (var i:int = 0; i < 3; i++)
                if ((x += _step) == 100 || x == 0) _step *= -1;
}

Добавлено через 3 минуты
зы. ни о чем тема
>>Вообщем как делаете вы ?
готовыми твинерами пользуюсь Ж)


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

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