Форум 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)
-   -   _height мувика повернутого на 90° (http://www.flasher.ru/forum/showthread.php?t=110482)

chingachgoog 03.04.2008 17:40

_height мувика повернутого на 90°
 
Вложений: 1
Удивительное поведение мувика - на один и тот же код реагирует по-разному в первом и втором клике

Код:

function вывих_мозга() {
        mc_a.mc_b._height = 200
}

but.onPress = вывих_мозга

Это надо видеть:
Вложение 19217

Molecula 03.04.2008 18:36

Это происходит с любым таким мувиком.
А если повернуть не на 90, а на 46, то там вообще он постепенно будет расти, как гриб.

etc 03.04.2008 18:53

Transform, Matrix.

chingachgoog 04.04.2008 12:57

Цитата:

Сообщение от Molecula
А если повернуть не на 90, а на 46, то там вообще он постепенно будет расти, как гриб.

Да, я ошибся с названием функции - это не вывих_мозга, а его взрыв.

Цитата:

Сообщение от __etc
Transform, Matrix.

Что Transform, Matrix? Хотелось бы не решения проблемы, а объяснения почему в данном случае так происходит?

qazwsx 04.04.2008 13:13

У меня ничего не происходит падобного. Попробуй посмотреть не в debug плеере а в standAlon....
Зато я знаюдругое если мувиклип загрузить методом loadClip();
и при onLoadComplete() сразуже написать stop(); На тот клип что загрузился, то он повернется на 90 градусов.

iNils 04.04.2008 13:25

Так гораздо забавнее
Код:

function вывих_мозга() {
        mc_a.mc_b._height += 10;
}

but.onPress = вывих_мозга

В целом, _height это сеттер, поэтому меняя высоту, мы не имеем непосредственного доступа к объекту, а передаем параметр методу, который что-то там делает с объектом.

chingachgoog 04.04.2008 13:45

Цитата:

Сообщение от qazwsx
У меня ничего не происходит падобного. Попробуй посмотреть не в debug плеере а в standAlon....

Не может быть :eek:
Я уж и всеми плеерами просмотрел и в разные версии сохранял - баг остается.
Как вы добились, что все нормально показывает???

Цитата:

Сообщение от iNils
Так гораздо забавнее

Может быть, но меня особо поразило, что я же задаю константу: ._height = 200, а мувик каждый раз меняется!

Цитата:

Сообщение от iNils
_height это сеттер, поэтому меняя высоту, мы не имеем непосредственного доступа к объекту, а передаем параметр методу, который что-то там делает с объектом.

Вот и хотелось бы понять логику этого "что-то там делает" :)

qazwsx 04.04.2008 13:47

Да меня глюкануло :). Ну можно предположить то что оно там делает...

etc 04.04.2008 14:00

Вы задали матрицу трансоформации, а потом начинаете рулить сеттерами и геттерами, вместо матрицы. Тут снесет башню не только флешу.

chingachgoog 04.04.2008 14:10

Цитата:

Сообщение от __etc
Вы задали матрицу трансоформации, а потом начинаете рулить сеттерами и геттерами, вместо матрицы. Тут снесет башню не только флешу.

Хорошо, начиная с 8-го флеш-редактора есть Transform, Matrix. Но раньше-то? У меня сейчас нет версии ниже 8-ки, а публикация из-под 8-ки в более ранние версии положения не спасает. Может кто-то скомпилирует из-под 6-ки?

Fernando Costa 04.04.2008 14:16

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

Код:

function вывих_мозга() {
        mc_a.mc_b._yscale = 200
}

but.onPress = вывих_мозга


iNils 04.04.2008 14:19

Цитата:

Сообщение от chingachgoog
Может быть, но меня особо поразило, что я же задаю константу: ._height = 200, а мувик каждый раз меняется!

После присвоения высоты, понятия высоты и ширины меняется местами, и когда повторно указывается высота, на самом деле задается ширина. Все преобразования с объектом происходят через матрицу, а _height искусственная величина и задается относительно положения объекта, видать тут и происходит накладка.

chingachgoog 04.04.2008 15:36

Вообщем причину глюка примерно начал представлять:
для этого надо понять, что свойства _height и _width вовсе не синонимичны свойствам _yscale и _xscale. Последние относительны самого клипа, а первые - относительны родителя мувиклипа.
При чтении _height и _width не возникает никаких проблем.
Но вот при задании - не все так очевидно. Если оси системы координат клипа и его родителя совпадают, то нет проблем. А если не совпадают, то бедный ФП пытается решить непростую задачку, которая ему похоже не по зубам: какое из значений _yscale и _xscale (совпадающие с осями координат мувика) надо увеличить на какую величину, чтобы в системе осей координат родителя клип имел такие-то и такие-то _height и _width .
add:
(на самом деле параметров a,d Transform Matrix )
Возможно, это проблема лишь с последними ФП, где, действительно, для трансформации мувика используются матрицы преобразования (пожалуй, лучшее объяснения Transformation Matrix, не смотря даже на английский, находится тут) Интересно, как в предыдущих версиях ФП происходила трансформация мувика и была ли такая проблема? Пока нет возможности проверить по неимении старых ФП :)

Kuruki 24.04.2008 13:34

Ребята, научите пожалуйста, как пользоваться этим классом (Transform Matrix) для задания точных _width и _height для мувика, а то что-то в справке по флеш это не сказано (только scale, Translation, Rotation, Skewing).
Уже второй раз сталкиваюсь с этим _width - достал

Fernando Costa 24.04.2008 14:28

ну что может быть подробнее
Цитата:

пожалуй, лучшее объяснения Transformation Matrix, не смотря даже на английский, находится тут
http://www.senocular.com/flash/tutor...ansformmatrix/

Kuruki 24.04.2008 18:22

Я уже смотрел и не нашел ни одного слова _width и _height в этой статье. Тыкните мне пальцем, где это.

iNils 24.04.2008 18:26

Там их не будет. Для матрице нет такого понятия, как выота и ширина, то масштаб относительно размеров объекта.

Psycho Tiger 24.04.2008 18:32

На крайняк можно пойти через 5 точку:
Код:

var gg:Number=mc._rotation;
mc._rotation=0;
mc._width=200;
mc._rotation=gg;


Kuruki 24.04.2008 18:37

Цитата:

Сообщение от __etc
Transform, Matrix.

Что Transform, Matrix? Хотелось бы не решения проблемы, а объяснения почему в данном случае так.....
А о чем тогда эта фраза? Ведь вопрос стоял об изменении высоты/ширины, а не об увеличении/уменьшении мувика.
to Psycho Tiger: спасибо за совет

chingachgoog 25.04.2008 13:14

Цитата:

Сообщение от Kuruki (Сообщение 735321)
Цитата:

Сообщение от chingachgoog
Цитата:

Сообщение от __etc
Transform, Matrix.

Что Transform, Matrix? Хотелось бы не решения проблемы, а объяснения почему в данном случае так.....

А о чем тогда эта фраза? Ведь вопрос стоял об изменении высоты/ширины, а не об увеличении/уменьшении мувика.

Собственно, изменение высоты/ширины мувика и происходит через увеличении/уменьшении мувика. Только понятия эти не идентичные (см. выше).
А __etc правильно написал, теперь увеличении/уменьшении идет через Transform, Matrix. Как было в старых ФП я пока не проверял.

Kuruki 25.04.2008 17:28

Да я просто думал, что с помощью Transform, Matrix можно изменять ширину/высоту мувика. Например, для ширины задать 123 пиксела, для высоты - 25пик.
(в том числе и для повернутого на 90 градусов)

Alex_beginner 24.05.2008 18:20

Такие трансформации делаеются с помощью класса Матрих и установки свойства клипа transform.matrix.

Как трансформить:

Matrix это Object со свойствами {a,b,c,d,tx,ty}
т.е.

- - - -
|a c tx| |scaleX skewX positionX|
|b d ty| = |skewY scaleY positionY|
|0 0 1| | 0 0 1 | - коэффициенты, необходимые для
- - - - корректной конкатенации матриц

Поясню, кто такие a=scaleX, c=skewX, tx=positionX, b=skewY, d=scaleY, ty=positionY.

Сии коэффициенты являются коээфциентами ниже приведенных уравнений. scaleX определяет коэффициент масшатба по оси X, т.е. если scaleX=1, клип становиться больше по оси X, ежели scaleX=2, то клип растянется по оси Х вдвое. Аналогично scaleY. Теперь, skewX - так называемый скос - это некий процесс похожий на перемещение одной стороны прямоугольника относительно противоположной стороны.
Получается параллелограм. SkewX - отвечает за скос по оси X, skewY - за скос по оси Y.
tx,ty - это банальное смещение по осям X и Y соответственно.

Расчет новых точек клипа по старым осуществляется по формулам:

Xновый=а*Xстарый+с*Yстарый+tx
Yновый=b*Xстарый+d*Yстарый+ty

Вы хотите получить заданную ширину и длину клипа. Варьируйте параметрами scaleX, scaleY. Хотите получить заданное позиционирование клипа - варьируйте параметрами tx, ty. Хотите отвратительно исказить клип, пользуйтесь skewX и skewY.

Т.е. задаешь сначала матрицу Matrix(полностью заполнив ее коэффициентами) и присваиваешь ссылку на нее свойству клипа transform.matrix и эге.

Пойдем дальше. Для определенных процессов с клипом есть определнные термины. Например, 2-d вращение. Описывается матрицей:

|cos(угол) sin(угол) 0|
|-sin(угол) cos(угол) 0|
|0 0 1|

Записать это в виде формата класса Matrix можно так:
a=cos(угол);
b=-sin(угол);
c= sin(угол);
d=cos(угол);
tx=0;
ty=0;

Для того чтобы повернуть клип и еще сжать и еще что нибудь по разным осям нужно применить конкатенацию матриц. Т.е необходимо сформировать несколько матриц трансформаций и в соотвествии с последовательностью трансформации их конкатенировать (для этого в классе Matrix реализован метод concat()). Далее, я думаю, будет понятно.

Спасибо за внимание.


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

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