|
|
|
| Здравствуйте уважаемое сообщество.
Вопрос не совсем по теме форума.
Хотел на flash реализовать вращение рисунка относительно оси Z, (если смотрим на экран рисунок вращается как монета на столе)
Пересмотрел кучу материалов, но нужного не нашёл (как правило рассматривают простое вращение), смог на flash сделать вращение по часовой стрелке.
Если честно с flash знаком поверхностно,
Может вы ссылку какую дадите? На урок или документацию. | |
|
|
|
|
|
|
|
для: pautina
(16.06.2011 в 19:51)
| | Правильно ли я понимаю, что ось Z у вас направлена снизу вверх, т.е. по сути это ось Y?
>Вопрос не совсем по теме форума.
Помоему как раз по теме | |
|
|
|
|
|
|
|
для: pautina
(16.06.2011 в 19:51)
| | Есть у BitmapData такой метод draw(), в качестве первого аргумента он принимает ссылку на оригинальное изображение, в качестве второго аргумента принимает матрицу преобразования Matrix. У этого класса есть метод rotate(q), который по сути формирует следующую матрицу поворота (она вращает объект в 2D-плоскости, которую мы видим)
cos(q) -sin(q)
sin(q) cos(q)
| для нужного вам вращения, специального метода нет, но можно сформировать эту матрицу вручную, с учетом проекции она будет выглядеть так
Фактически создание матрицы сводится к передачи этих четырех параметров, где q - угол поворота в радианах. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2011 в 22:03)
| | Извините можно ли поподробнее. есть ли готовый пример с исходным кодом. | |
|
|
|
|
86.2 Кб |
|
|
для: cheops
(16.06.2011 в 22:03)
| | чё-то я не понимаю, зачем такие сложности? а просто уменьшить ширину объекта, чтоб потом ее увеличить? пример в аттаче | |
|
|
|
|
|
|
|
для: elenaki
(17.06.2011 в 09:34)
| | Можно, но именно при вращении скорости на разных участках получатся разные и будут точно соответствовать вращению, а не схлапыванию объекта. Хотя можно начать именно с вашего варианта (тоже сначала хотел его предложить, но как залез в матрицы вращения - ностальгия нахлынула :). | |
|
|
|
|
|
|
|
для: cheops
(17.06.2011 в 10:10)
| | Может можно это реализовать. Ни поможете с кодом. | |
|
|
|
|
|
|
|
для: pautina
(18.06.2011 в 18:27)
| | А пример в архиве, который прикрепила elenaki не подходит? | |
|
|
|
|
|
|
|
для: cheops
(18.06.2011 в 18:31)
| | Нет такой пример не подходит хотелось бы кодом сделать. | |
|
|
|
|
|
|
|
|
для: pautina
(19.06.2011 в 13:47)
| | Смотрите приложение ниже. | |
|
|
|
|
|
|
|
для: pautina
(16.06.2011 в 19:51)
| | Можно начать отталкиваться от следующего приложения
package rotate
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.Timer;
public class RotateImage extends Sprite
{
// Загрузчик изображения
private var loader:Loader;
// Таймер вращения
private var rotateTimer:Timer;
// Угол вращения
private var angle:int;
// Конструктор
public function RotateImage():void
{
// Вызываем конструктор базового класса
super();
// Устанавливаем угол
this.angle = 0;
// Создаем загрузчик
this.loader = new Loader();
// Назначаем обработчик события окончания
// загрузки изображения
this.loader.contentLoaderInfo.addEventListener(Event.INIT, imageCompleteHandler);
// Загружаем изображение
this.loader.load(new URLRequest("test.jpg"));
// Обработчик вращения
this.rotateTimer = new Timer(100);
this.rotateTimer.addEventListener(TimerEvent.TIMER, rotateTimerHandler);
}
// Обработчик события окончания загрузки изображения
private function imageCompleteHandler(evt:Event):void
{
// Прямоугольник
this.addChild(this.loader);
// Отступ от левого края
this.loader.x = 200;
// Отступ сверху
this.loader.y = 50;
// Смещаем точку поворота в центр
this.loader.content.x = -this.loader.content.width / 2;
// Запускаем таймер вращения
this.rotateTimer.start();
}
// Обработчик таймера вращения
private function rotateTimerHandler(evt:TimerEvent):void
{
// Один угол за один такт
this.angle += 1;
// Обнуляем значение угла, при достижении полного поворота
if(this.angle > 359) this.angle = 0;
// Вращаем изображение
this.loader.rotationY = this.angle;
}
}
}
| Есть оказывается свойство rotationY, которое я думаю вам может подойти. Пример того, как это выглядит в откомпилированном варианте можно найти тут http://softtime.ru/actionscripts/rotate.php. | |
|
|
|
|
|
|
|
для: cheops
(19.06.2011 в 15:53)
| | Спасибо большое за код. | |
|
|
|
|
|
|
|
для: pautina
(21.06.2011 в 20:12)
| | Странно что то код у меня не даёт вращения.
Может я что не так делаю
Я создаю новый flash файл, импортирую в рабочую область рисунок logo.jpg, для ключевого кадра 1 в действиях пишу выше указанный код.
При тестировании ролика вращения не вижу, рисунок стоит на месте.
Что неправильно сделано? | |
|
|
|
|
|
|
|
для: pautina
(27.06.2011 в 18:12)
| | Собственно тут уже все реализовано, можно просто связать класс с fla, а вместо test.jpg подставить logo.jpg. Или вам обязательно нужно вращать символ в первом ключевом кадре?
PS Вы какую версию ActionScript используете? Здесь Action Script 3. | |
|
|
|
|
|
|
|
для: cheops
(27.06.2011 в 19:27)
| | у меня ActionScript 3.
Вращать в первом ключевом кадре необязательно.
Лишь бы сделать чтоб заработало, я просто flash не касался.
Как связать класс с fla? | |
|
|
|
|
|
|
|
для: pautina
(27.06.2011 в 20:03)
| | В свойствах fla-файла найдите поле "класс документа", там нужно прописать rotate.RotateImage, причем код, приведенный выше должен находится в rotate/RotateImage.as, а папка rotate на том же уровне, что и fla-файл. | |
|
|
|
|
|
|
|
для: cheops
(27.06.2011 в 20:24)
| | Прошу извинить.
А по шагам не можете сказать что нужно сделать. Я с flash просто совсем не работал. | |
|
|
|
|
|
|
|
для: pautina
(27.06.2011 в 20:33)
| | У вас может есть готовый проект? Или давайте я вам вышлю свой проект? У вас какая версия Flash? Просто расположение элементов здорово различается от выбранной компоновки, сложно даже сказать куда вам смотреть: влево, вниз, вправо... это будет зависеть от того, какая у вас версия Flash и какая компоновка инструментов выбрана. | |
|
|
|
|
|
|
|
для: cheops
(27.06.2011 в 20:39)
| | Вышлите пожалуйста свой проект. У меня Flash CS3? ActionScript 3.0 | |
|
|
|
|
|
|
|
для: pautina
(27.06.2011 в 20:52)
| | Хм... а вы знаете у Flash CS3 оказывается rotationY у контейнера loader нет... нужно вероятно какой-то другой контейнер использовать... поэтому либо придется использовать Flash CS5 в котором я писал скрипт, либо ждать, когда я под CS3 переработаю скрипт. Либо удовлетвориться менее точным в динамике scaleX, который будет сжимать изображение, а не вращать. | |
|
|
|
|
|
|
|
для: cheops
(27.06.2011 в 21:17)
| | А для flash cs5 какие системные требования, низнаю потянет ли моя машина? | |
|
|
|
|
|
|
|
для: pautina
(27.06.2011 в 21:26)
| | На Windows XP SP3 точно будет работать, как и на Vista без SP1. | |
|
|
|
|
|
|
|
для: cheops
(27.06.2011 в 21:34)
| | Поставил себе Flash СS5.
Но не могу создать вращение, ни могли бы вы описать по шагам как его сделать?
Пытался сделать так.
В свойствах fla-файла найдите поле "класс документа", там нужно прописать rotate.RotateImage, причем код, приведенный выше должен находится в rotate/RotateImage.as, а папка rotate на том же уровне, что и fla-файл.
- Сначала импортировал рисунок logo.jpg в рабочую область
- Не смог найти где в свойствах flash файла прописать класс.
И выложить исходник. | |
|
|
|
|
47.4 Кб |
|
|
для: pautina
(02.07.2011 в 07:55)
| | Попробуйте следующий проект. Я не уверен, что Flash CS5 правильно расположит пути, поэтому, если есть возможность создайте проект в D:/flash/zRotate (папка zRotate в архиве).
>- Сначала импортировал рисунок logo.jpg в рабочую область
Ничего пока импортировать не нужно, запустите этот ActionScript, который сам загружает фотографию, с fla ничего делать не нужно, кроме того, чтобы прописать в свойствах класс (обязательно в этом примере найдите, где он прописан). | |
|
|
|
|
50 Кб |
|
|
для: pautina
(02.07.2011 в 07:55)
| | Если проект запустить не получится, создайте новый, добавьте fla-файл, выберите классический режим и пропишите AS-скрипт в точке, выделенной красным цветом на изображении. Рядом с fla-файлом должна быть папка rotate, в которой должен находиться скрипт RotateImage.as.
[поправлено модератором: новый вопрос выделен в новую тему] | |
|
|
|