Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Метод setTo класса Matrix (http://www.flasher.ru/forum/showthread.php?t=207677)

alexandrratush 29.04.2014 20:48

Метод setTo класса Matrix
 
Добрый день!
Возникла задача присвоить текущей матрице отдельные значения, к примеру изменить tx и ty, но не трогать b и c.
И вот увидел метод setTo. Думал что это то что нужно, но возникает ошибка
Цитата:

Call to a possibly undefined method setTo through a reference with static type flash.geom:Matrix.
Как так? :)

Приходиться писать так:
Код AS3:

var mSource:Matrix = _canvas.transform.matrix;
        mSource.a = mBack.a;
        mSource.d = mBack.d;
        mSource.tx = mBack.tx;
        mSource.ty = mBack.ty;

Подскажите может есть более лаконичный способ.
Спасибо!

P.S. Проблема решена, нужно было сначала посмотреть на версию среды выполнения: Flash Player 11, AIR 3.0, Flash Lite 4

in4core 29.04.2014 23:07

alexandrratush - я не понял, а в чем сложность
Код AS3:

var mSource:Matrix = _canvas.transform.matrix;
mSource.tx = 1;

Какие свойства нужны такие и задал. А SetTo как раз ПРОСИТ все написать, а не только те, что требуется отдельно.

alexandrratush 29.04.2014 23:43

Цитата:

Какие свойства нужны такие и задал. А SetTo как раз ПРОСИТ все написать, а не только те, что требуется отдельно.
Да вы правы, что придется задавать и хранить все свойства. Значит вместо одной строчки буду писать четыре. :)

ZackMercury 30.04.2014 01:51

Цитата:

Сообщение от alexandrratush (Сообщение 1164936)
Да вы правы, что придется задавать и хранить все свойства. Значит вместо одной строчки буду писать четыре. :)

Можно статический метод написать, в него передаёте первое и второе, а в нём присваиваете всё, что нужно :)
Это на случай, если у вас много раз повторяется)

А так, это просто может повысить читабельность кода.

alatar 30.04.2014 16:44

Цитата:

Сообщение от alexandrratush (Сообщение 1164936)
Да вы правы, что придется задавать и хранить все свойства. Значит вместо одной строчки буду писать четыре. :)

Код AS3:

var mSource:Matrix = _canvas.transform.matrix;
mSource.setTo(mBack.a, mSource.b, mSource.c, mBack.d, mBack.tx, mBack.ty);


alexandrratush 30.04.2014 18:49

alatar вы гений. Спасибо!
А мне пора брать выходной, стыдно не додуматься до такой простоты.

in4core 30.04.2014 19:32

Хоть убей, я так и не понял, что тут гениального и в чем в итоге была задача. Как было сказано вначале темы - хочу задать ОПРЕДЕЛЕННЫЕ свойства.
matrix.tx =
это самое быстрое.
Вариант который предложил alatar - , об этом уже было сказано, но тут вы принудительно пишите ТЕ свойства, которые НЕ надо изменять, например. Толи ТС неверно задал вопрос, то ли я его неверно прочитал. Но суть та же, что setTo , что в 4 строки - разницы никакой, везде надо записать ВСЕ свойства, хотя в 4 строки - все записывать не надо :)

dimarik 30.04.2014 21:16

in4core win. Примерно на миллионе операций разница уже будет чувствительна.

in4core 01.05.2014 04:28

dimarik - я не против, я думаю даже ТС - не думает о 1 млн операций, тут вопрос помомему не о скорости стоял.

alexandrratush 01.05.2014 11:14

Изначально я так и писал:
Код AS3:

var mSource:Matrix = _canvas.transform.matrix;
        mSource.a = mBack.a;
        mSource.d = mBack.d;
        mSource.tx = mBack.tx;
        mSource.ty = mBack.ty;

Но потом случайно увидел метод setTo, и подумал попробовать использовать его. По докам в принципе все понял, но как известно Adobe не всегда раскрывает все секреты в офф. док., нужно проверять в работе. :D

Метод доступен только с версии 11. Вот и пришлось создать тему. Разгадку понял только через 2 минуты после создания топика.

Про скорость работы речь не идет. Я хотел понять как использовать этот метод, и вообще как удобней всего было бы.
Задача простая была. После каждого зума изображения сохраняем в массиве копию матрицы с определенными свойствами (смещение и скейл), а после выбираем предпоследнюю копию матрицы, и изменяем текущую. Вот и все. :)


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

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