Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   старый добрый swap() — возможен вообще? (http://www.flasher.ru/forum/showthread.php?t=150730)

the_nitro 17.02.2011 12:28

Можно так:
a ^= b;
b ^= a;
a ^= b;

zuxul 17.02.2011 13:34

Это сработает, если Вам не нужны хвосты после точки в числе...

semenyakinVS 17.02.2011 13:54

А в AS3, часом, нет чего-нибудь вроде сишных макросов? Которые генерируют код в момент компиляции?

Если есть - может помочь.

Добавлено через 46 секунд
Цитата:

a ^= b;
b ^= a;
a ^= b;
Ух ты! Что это?

bav 17.02.2011 14:01

operators#bitwise_XOR_assignment

Zebestov 17.02.2011 14:12

the_nitro, и как мне пользоваться этой операцией для swap-а координат U и V (это числа от 0 до 1), если результат возвращается в int?

Котяра 17.02.2011 14:50

Что-то подобное наверное сможет realaxy editor.
Также можно написать сниппет/плагин для FD.
Но итоговый код всё равно будет с swap.

Волгоградец 17.02.2011 15:48

Я тоже однажды озадачился таким вопросом. Универсальный метод написал такой (как в примере Bgg):
Код AS3:

var a:Number = 10.5;
var b:Number = 15.3;
swap(a, b, 'a', 'b');
function swap(a:Number, b:Number, strA:String, strB:String):void
{
        a = a + b;
        b = a - b;
        a = a - b;
 
        this[strA] = a;
        this[strB] = b;
}

Но он очень медленный. В итоге я завел для каждой пары переменных свой метод (у меня их было не много):
Код AS3:

var a:Number = 10.5;
var b:Number = 15.3;
swapAB(a, b);
function swapAB(i:Number, j:Number):void
{
        i = i + j;
        j = i - j;
        i = i - j;
 
        a = i;
        b = j;
}

Этот работает как молния - в релизном плеере разницы между bitwise и этим - нету.

i.o. 17.02.2011 15:56

да уж проще тогда:
Код AS3:

public final class NumberPair
{
        public function NumberPair( a:Number=0.0, b:Number=0.0 )
        {
                this.a = a;
                this.b = b;
        }
 
 
        public var a:Number;
        public var b:Number;
 
        private var _swap:Number;
 
 
        public function swap():void
        {
                _swap = a;
                a = b;
                b = _swap;
        }
}

И кстати, Волгоградец:
Код AS3:

function swapAB(i:Number, j:Number):void
{
        /* Лишнее!
        i = i + j;
        j = i - j;
        i = i - j;
        */

        a = j;
        b = i;
}


Zebestov 17.02.2011 15:59

эээ...
Код AS3:

var a:Number = 10.5;
var b:Number = 15.3;
swapAB(a, b);
function swapAB(i:Number, j:Number):void
{
        //i = i + j;
        //j = i - j;
        //i = i - j;
 
        a = j
        b = i;
}

не?

Добавлено через 3 минуты
Опередил.
Ну а если вернуться к коду из поста номер 7, то станет видно, что методы для swap-а двух конкретных значений не подойдут. Придется только для данного случая наплодить 8 новых функций.

Волгоградец 17.02.2011 16:09

Да, это я лоханулся - конечно лишнее ).
Zebestov, а что, неужели в Haxe нет аналога ref?


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

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