![]() |
поворот картинки по 90 градусам
Есть контейнер, в нем постоянно находится только 1 чайлд - картинка. Картинка постоянно позиционируется по центру контейнера, когда с ней производят какие нибудь манипуляции. Есть задача, нужно по нажатию кнопки поворачивать эту саму картинку на += 90 градусов.
Вопрос такой, можно ли как то воспользоваться матрицами или еще чем, чтобы свернуть точку кручения в центр, тогда бы вопросов не было. Покажите пожалуйста пример, если можно. П.с. конструкция должна остаться такой КОнетйнер - внутри крутимая картинка. Координаты контейнера и применение к нему матриц недопустимо. Тоесть работать можно только с 1 чайлд-картинкой. И да пока не забыл, после применения кручения, нужно вернуть координату x и y в левый верхний угол соотв. Если матрицами воспользоваться сложно, или просто не получится в данной задаче, можно обойтись формулами, подстаривать координаты после поворота сразу в зависимости от ширины и высоты, создавая иллюзию кручения через центр. Поскольку с формулами у меня тоже проблемы, если кто делал - покажите пожалуйста пример. Спасибо |
Матрицами это делается в три хода: сдвинул > повернул > поставил на место
|
Да
http://help.adobe.com/en_US/FlashPla...ansformer.html методы rotateAroundExternalPoint rotateAroundInternalPoint Добавлено через 4 минуты Поставить конейтер на начало его элементов можно при помощи getRect или getBounds и соответственно localToGlobal методов дисплэйобжекта |
@Александр Мостовой
А можете показать примерчик поворотов? Допустим контейнер есть _cont , а картинка внутри _image . А то мне несовсем понятно как должны работать методы rotateAround...* |
Код AS3:
|
Wolsh спасибо большое. буду разбираться
Добавлено через 44 минуты Wolsh что то косячит немного, или я не верно делаю Код AS3:
Добавлено через 2 часа 9 минут Решено. Вот аналог вашего класса Код AS3:
Код AS3:
|
А, блин) Не с того проекта дернул класс, сорри. Там не было возврата в дефолт, это было в отдельном методе)).
Исправил код наверху на универсальный. Ну или, если нравятся матрицы, используйте их. По Вашему коду - зачем статический метод для установки точки? Не лучше ли передавать точку в метод поворота, ведь она индивидуальна для каждого объекта, который Вы будете вращать? И почему set externalPoint(), если вращение методом rotateAroundInternalPoint() ? "Чтоб никто не догадался"? |
Wolsh ага чтоб никто не догадался)) Вопрос такой раз уж начал я делать все матрицами, как вернуть изначальную матрицу? Тоесть была матрица (1,0,0,1,100,100) допустим и угол был 0 градусов . Теперь я хочу повернуть объект на 90 градусов при этом после поворота сделать так, что бы матрица на объекте была такой, что поворот = 0, х и y координата = верхней левой точке?. Спасибо
|
х и y координата всегда в верхней левой точке, выражаясь вашим языком.
То есть чтобы изменилось положение НАЧАЛА системы координат внутри спрайта относительно его содержимого (я правильно понял о чем речь?) надо переместить это содержимое в новые координаты. В случае детишек все решаемо математикой, но если это собственная графика спрайта (нарисованная в нем Графиксом), ее только перерисовывать. |
Wolsh я поясню. Вот был объект ( не нарисованный , а битмап) и стоял в 100-100. Я его повернул на 90 градусов. проверяю координаты пишет что x и y находятся теперь в правом верхнем углу, и это логично ведь прошел поворот и объект сменил матрицу. Вот я и спрашиваю как сделать, чтобы поворот прошел, но х и у снова находились в левом верхнем углу. Спасибо
|
in4core я поясню. Во-первых, х и у находятся везде вокруг. Я даже не знаю, какие тяжелые наркотики надо употребить, чтобы все х и у вселенной собрались в одном углу. Вы говорите про начало системы координат объекта - точке, которая в самом объекте соответствует координатам (0, 0). Как бы Вы ни крутили объект, Вы крутите только его систему координат. А все содержимое объекта остается в этой его системе координат, на прежних местах. То, что хотите Вы - именно изменить положение и угол СОДЕРЖИМОГО. Ну подумайте сами - ведь если Вы повернете все, что в спрайте, на 90 градусов, не поворачивая и не смещая сам спрайт – это и будет то, чего Вы хотите. Точка (0,0) останется на своем месте, а все видимое повернется на нужный угол. Так?
|
Хм. нет не так. Есть спрайт, в нем картинка. картинка на 100,100 . Создаем хелпер спрайт 10*10. Пробуем поставить его на координату картинка.x картинка.y - трейсим - выводит 100-100. Круто все верно. Теперь поворачиваем картинку в спрайте на 90 градусов. ( предположим что картинка была квадратной ) пробуем поместись хелпер на картинка.x картинка.y = выводит 200 - 100. Хотя левый угол картинки досих пор у нас в 100-100. А нам надо чтобы после трейса картинка.x картинка.y - мы увидили 100-100, что до по ворота, что после, из рассчета того, что точка поворота была в центре картинки. А сейчас до поворота центральной точки КВАДРАТНОЙ картинки, мы видим 100-100, после поворота 200-100, при следующем повороте 200-200, при следующем 100 - 200 - и при последнем УРА 100-100. а надо всегда 100-100 . При этом картинка будет не квадратной, тоесть точку привязки картинки нужно всегда помещать в левый верхний ВИДИМЫЙ для нас угол ( я понимаю, о чем вы говорите, что крутится вся система координат и левый верхний угол становится уже нижним и т.д. ) - всегда БЫЛ ВИДИМЫМ левым. Фу...много лишних слов, но надеюсь теперь более понятно
|
Попробуйте перечитать то, что я написал выше.
|
Цитата:
|
Wolsh в том то и дело что я перечитал. Вы написали :
Цитата:
Добавлено через 1 минуту tsarapkabel да да читал, только не понял как использовать. Вы сами пробовали? покажите пожалуйста. |
Цитата:
Цитата:
|
щас in4core что-нибудь придумает, спакуха! )
|
Цитата:
|
хотя справился другим методом, битпамдатой, там совсем для другого надо было. Но тема все равно актуальна ибо на будущее знать
|
Создаём спрайт.
По MOUSE_MOVE смотрим координаты нижней левой точки спрайта. По клику выводится трейс этой координаты методом transformPoint. Поворачивается спрайт. Выводится второй трейс с уже изменёнными координатами. И в завершении трейс дельты (на сколько изменились координаты). Код AS3:
|
tsarapkabel. Особо не вникал, но мне кажется не то, что надо.
Надо приблизительно следующее : Код AS3:
|
in4core, вот Гейзенберг, Шрёдингер и прочие люди, создавшие квантовую механику были великими ученым. А ещё был такой Эйнштейн, и он ну никак не был согласен с квантовой теорией, она ему казалось абсурдной. И собрался он с ребятами-коллегами и придумали парадокс ЭПР. Можете почитать, кстати. И довольные ходили, опровергли как-будто бы всю теорию. Но вот в будущем люди провели эксперимент, который доказал правоту квантовой теории, а не Эйнштейна, который в это не верил. Кстати, Эйнштейн ещё постулировал что вообще любая информация не может передаваться быстрее скорости света. Этот эксперимент заставил его постулат выглядеть иначе: полезная информация не может передаваться быстрее скорости света.
Я к чему это всё? Даже Эйнштейн, который был в чем-то уверен ошибался, но его коллеги пролили свет. Вам пролили свет, что нативно во флеше это невозможно. Более того, в 9 из 10 случаев это бесполезно, как та информация, что передается быстрее скорости света. Вы не можете нарушить законы физики и Вы не можете нарушить законы нативного API. Вы страдаете фигнёй. Я извиняюсь, что заговорил физическими аналогиями, но других вариантов объяснить Вам это я не вижу. |
| Часовой пояс GMT +4, время: 14:08. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.