Просмотр полной версии : _height мувика повернутого на 90°
chingachgoog
03.04.2008, 17:40
Удивительное поведение мувика - на один и тот же код реагирует по-разному в первом и втором клике
function вывих_мозга() {
mc_a.mc_b._height = 200
}
but.onPress = вывих_мозга
Это надо видеть:
19217
Molecula
03.04.2008, 18:36
Это происходит с любым таким мувиком.
А если повернуть не на 90, а на 46, то там вообще он постепенно будет расти, как гриб.
chingachgoog
04.04.2008, 12:57
А если повернуть не на 90, а на 46, то там вообще он постепенно будет расти, как гриб.
Да, я ошибся с названием функции - это не вывих_мозга, а его взрыв.
Transform, Matrix.
Что Transform, Matrix? Хотелось бы не решения проблемы, а объяснения почему в данном случае так происходит?
У меня ничего не происходит падобного. Попробуй посмотреть не в debug плеере а в standAlon....
Зато я знаюдругое если мувиклип загрузить методом loadClip();
и при onLoadComplete() сразуже написать stop(); На тот клип что загрузился, то он повернется на 90 градусов.
Так гораздо забавнее
function вывих_мозга() {
mc_a.mc_b._height += 10;
}
but.onPress = вывих_мозга
В целом, _height это сеттер, поэтому меняя высоту, мы не имеем непосредственного доступа к объекту, а передаем параметр методу, который что-то там делает с объектом.
chingachgoog
04.04.2008, 13:45
У меня ничего не происходит падобного. Попробуй посмотреть не в debug плеере а в standAlon....
Не может быть :eek:
Я уж и всеми плеерами просмотрел и в разные версии сохранял - баг остается.
Как вы добились, что все нормально показывает???
Так гораздо забавнее
Может быть, но меня особо поразило, что я же задаю константу: ._height = 200, а мувик каждый раз меняется!
_height это сеттер, поэтому меняя высоту, мы не имеем непосредственного доступа к объекту, а передаем параметр методу, который что-то там делает с объектом.
Вот и хотелось бы понять логику этого "что-то там делает" :)
Да меня глюкануло :). Ну можно предположить то что оно там делает...
Вы задали матрицу трансоформации, а потом начинаете рулить сеттерами и геттерами, вместо матрицы. Тут снесет башню не только флешу.
chingachgoog
04.04.2008, 14:10
Вы задали матрицу трансоформации, а потом начинаете рулить сеттерами и геттерами, вместо матрицы. Тут снесет башню не только флешу.
Хорошо, начиная с 8-го флеш-редактора есть Transform, Matrix. Но раньше-то? У меня сейчас нет версии ниже 8-ки, а публикация из-под 8-ки в более ранние версии положения не спасает. Может кто-то скомпилирует из-под 6-ки?
Fernando Costa
04.04.2008, 14:16
тоже встречался с такой шнягой, бился целый день. В твоем случае работает так как надо это
function вывих_мозга() {
mc_a.mc_b._yscale = 200
}
but.onPress = вывих_мозга
Может быть, но меня особо поразило, что я же задаю константу: ._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, не смотря даже на английский, находится тут (http://www.senocular.com/flash/tutorials/transformmatrix/)) Интересно, как в предыдущих версиях ФП происходила трансформация мувика и была ли такая проблема? Пока нет возможности проверить по неимении старых ФП :)
Ребята, научите пожалуйста, как пользоваться этим классом (Transform Matrix) для задания точных _width и _height для мувика, а то что-то в справке по флеш это не сказано (только scale, Translation, Rotation, Skewing).
Уже второй раз сталкиваюсь с этим _width - достал
Fernando Costa
24.04.2008, 14:28
ну что может быть подробнее пожалуй, лучшее объяснения Transformation Matrix, не смотря даже на английский, находится тутhttp://www.senocular.com/flash/tutorials/transformmatrix/
Я уже смотрел и не нашел ни одного слова _width и _height в этой статье. Тыкните мне пальцем, где это.
Там их не будет. Для матрице нет такого понятия, как выота и ширина, то масштаб относительно размеров объекта.
Psycho Tiger
24.04.2008, 18:32
На крайняк можно пойти через 5 точку:
var gg:Number=mc._rotation;
mc._rotation=0;
mc._width=200;
mc._rotation=gg;
Сообщение от __etc
Transform, Matrix.
Что Transform, Matrix? Хотелось бы не решения проблемы, а объяснения почему в данном случае так.....
А о чем тогда эта фраза? Ведь вопрос стоял об изменении высоты/ширины, а не об увеличении/уменьшении мувика.
to Psycho Tiger: спасибо за совет
chingachgoog
25.04.2008, 13:14
Transform, Matrix.
Что Transform, Matrix? Хотелось бы не решения проблемы, а объяснения почему в данном случае так.....
А о чем тогда эта фраза? Ведь вопрос стоял об изменении высоты/ширины, а не об увеличении/уменьшении мувика.
Собственно, изменение высоты/ширины мувика и происходит через увеличении/уменьшении мувика. Только понятия эти не идентичные (см. выше).
А __etc правильно написал, теперь увеличении/уменьшении идет через Transform, Matrix. Как было в старых ФП я пока не проверял.
Да я просто думал, что с помощью 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()). Далее, я думаю, будет понятно.
Спасибо за внимание.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.