Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Flash

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вращение flash в плоскости относительно оси Z
 
 автор: pautina   (16.06.2011 в 19:51)   письмо автору
 
 

Здравствуйте уважаемое сообщество.
Вопрос не совсем по теме форума.
Хотел на flash реализовать вращение рисунка относительно оси Z, (если смотрим на экран рисунок вращается как монета на столе)
Пересмотрел кучу материалов, но нужного не нашёл (как правило рассматривают простое вращение), смог на flash сделать вращение по часовой стрелке.
Если честно с flash знаком поверхностно,
Может вы ссылку какую дадите? На урок или документацию.

  Ответить  
 
 автор: cheops   (16.06.2011 в 21:09)   письмо автору
 
   для: pautina   (16.06.2011 в 19:51)
 

Правильно ли я понимаю, что ось Z у вас направлена снизу вверх, т.е. по сути это ось Y?

>Вопрос не совсем по теме форума.
Помоему как раз по теме

  Ответить  
 
 автор: cheops   (16.06.2011 в 22:03)   письмо автору
 
   для: pautina   (16.06.2011 в 19:51)
 

Есть у BitmapData такой метод draw(), в качестве первого аргумента он принимает ссылку на оригинальное изображение, в качестве второго аргумента принимает матрицу преобразования Matrix. У этого класса есть метод rotate(q), который по сути формирует следующую матрицу поворота (она вращает объект в 2D-плоскости, которую мы видим)
cos(q)  -sin(q)
sin(q)   cos(q)
для нужного вам вращения, специального метода нет, но можно сформировать эту матрицу вручную, с учетом проекции она будет выглядеть так
cos(q)   0
0        1
Фактически создание матрицы сводится к передачи этих четырех параметров, где q - угол поворота в радианах.

  Ответить  
 
 автор: pautina   (17.06.2011 в 06:22)   письмо автору
 
   для: cheops   (16.06.2011 в 22:03)
 

Извините можно ли поподробнее. есть ли готовый пример с исходным кодом.

  Ответить  
 
 автор: elenaki   (17.06.2011 в 09:34)   письмо автору
86.2 Кб
 
   для: cheops   (16.06.2011 в 22:03)
 

чё-то я не понимаю, зачем такие сложности? а просто уменьшить ширину объекта, чтоб потом ее увеличить? пример в аттаче

  Ответить  
 
 автор: cheops   (17.06.2011 в 10:10)   письмо автору
 
   для: elenaki   (17.06.2011 в 09:34)
 

Можно, но именно при вращении скорости на разных участках получатся разные и будут точно соответствовать вращению, а не схлапыванию объекта. Хотя можно начать именно с вашего варианта (тоже сначала хотел его предложить, но как залез в матрицы вращения - ностальгия нахлынула :).

  Ответить  
 
 автор: pautina   (18.06.2011 в 18:27)   письмо автору
 
   для: cheops   (17.06.2011 в 10:10)
 

Может можно это реализовать. Ни поможете с кодом.

  Ответить  
 
 автор: cheops   (18.06.2011 в 18:31)   письмо автору
 
   для: pautina   (18.06.2011 в 18:27)
 

А пример в архиве, который прикрепила elenaki не подходит?

  Ответить  
 
 автор: pautina   (19.06.2011 в 10:11)   письмо автору
 
   для: cheops   (18.06.2011 в 18:31)
 

Нет такой пример не подходит хотелось бы кодом сделать.

  Ответить  
 
 автор: pautina   (19.06.2011 в 13:47)   письмо автору
 
   для: pautina   (19.06.2011 в 10:11)
 

Смотрите можно ли сделать такое вращение
http://my-page69.mst-link.ru/templates/template_tut/index_portfolio/portfolio.html

  Ответить  
 
 автор: cheops   (19.06.2011 в 15:54)   письмо автору
 
   для: pautina   (19.06.2011 в 13:47)
 

Смотрите приложение ниже.

  Ответить  
 
 автор: cheops   (19.06.2011 в 15:53)   письмо автору
 
   для: 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.

  Ответить  
 
 автор: pautina   (21.06.2011 в 20:12)   письмо автору
 
   для: cheops   (19.06.2011 в 15:53)
 

Спасибо большое за код.

  Ответить  
 
 автор: pautina   (27.06.2011 в 18:12)   письмо автору
 
   для: pautina   (21.06.2011 в 20:12)
 

Странно что то код у меня не даёт вращения.
Может я что не так делаю
Я создаю новый flash файл, импортирую в рабочую область рисунок logo.jpg, для ключевого кадра 1 в действиях пишу выше указанный код.
При тестировании ролика вращения не вижу, рисунок стоит на месте.
Что неправильно сделано?

  Ответить  
 
 автор: cheops   (27.06.2011 в 19:27)   письмо автору
 
   для: pautina   (27.06.2011 в 18:12)
 

Собственно тут уже все реализовано, можно просто связать класс с fla, а вместо test.jpg подставить logo.jpg. Или вам обязательно нужно вращать символ в первом ключевом кадре?

PS Вы какую версию ActionScript используете? Здесь Action Script 3.

  Ответить  
 
 автор: pautina   (27.06.2011 в 20:03)   письмо автору
 
   для: cheops   (27.06.2011 в 19:27)
 

у меня ActionScript 3.
Вращать в первом ключевом кадре необязательно.
Лишь бы сделать чтоб заработало, я просто flash не касался.
Как связать класс с fla?

  Ответить  
 
 автор: cheops   (27.06.2011 в 20:24)   письмо автору
 
   для: pautina   (27.06.2011 в 20:03)
 

В свойствах fla-файла найдите поле "класс документа", там нужно прописать rotate.RotateImage, причем код, приведенный выше должен находится в rotate/RotateImage.as, а папка rotate на том же уровне, что и fla-файл.

  Ответить  
 
 автор: pautina   (27.06.2011 в 20:33)   письмо автору
 
   для: cheops   (27.06.2011 в 20:24)
 

Прошу извинить.
А по шагам не можете сказать что нужно сделать. Я с flash просто совсем не работал.

  Ответить  
 
 автор: cheops   (27.06.2011 в 20:39)   письмо автору
 
   для: pautina   (27.06.2011 в 20:33)
 

У вас может есть готовый проект? Или давайте я вам вышлю свой проект? У вас какая версия Flash? Просто расположение элементов здорово различается от выбранной компоновки, сложно даже сказать куда вам смотреть: влево, вниз, вправо... это будет зависеть от того, какая у вас версия Flash и какая компоновка инструментов выбрана.

  Ответить  
 
 автор: pautina   (27.06.2011 в 20:52)   письмо автору
 
   для: cheops   (27.06.2011 в 20:39)
 

Вышлите пожалуйста свой проект. У меня Flash CS3? ActionScript 3.0

  Ответить  
 
 автор: cheops   (27.06.2011 в 21:17)   письмо автору
 
   для: pautina   (27.06.2011 в 20:52)
 

Хм... а вы знаете у Flash CS3 оказывается rotationY у контейнера loader нет... нужно вероятно какой-то другой контейнер использовать... поэтому либо придется использовать Flash CS5 в котором я писал скрипт, либо ждать, когда я под CS3 переработаю скрипт. Либо удовлетвориться менее точным в динамике scaleX, который будет сжимать изображение, а не вращать.

  Ответить  
 
 автор: pautina   (27.06.2011 в 21:26)   письмо автору
 
   для: cheops   (27.06.2011 в 21:17)
 

А для flash cs5 какие системные требования, низнаю потянет ли моя машина?

  Ответить  
 
 автор: cheops   (27.06.2011 в 21:34)   письмо автору
 
   для: pautina   (27.06.2011 в 21:26)
 

На Windows XP SP3 точно будет работать, как и на Vista без SP1.

  Ответить  
 
 автор: pautina   (02.07.2011 в 07:55)   письмо автору
 
   для: cheops   (27.06.2011 в 21:34)
 

Поставил себе Flash СS5.
Но не могу создать вращение, ни могли бы вы описать по шагам как его сделать?
Пытался сделать так.
В свойствах fla-файла найдите поле "класс документа", там нужно прописать rotate.RotateImage, причем код, приведенный выше должен находится в rotate/RotateImage.as, а папка rotate на том же уровне, что и fla-файл.
- Сначала импортировал рисунок logo.jpg в рабочую область
- Не смог найти где в свойствах flash файла прописать класс.
И выложить исходник.

  Ответить  
 
 автор: cheops   (02.07.2011 в 13:38)   письмо автору
47.4 Кб
 
   для: pautina   (02.07.2011 в 07:55)
 

Попробуйте следующий проект. Я не уверен, что Flash CS5 правильно расположит пути, поэтому, если есть возможность создайте проект в D:/flash/zRotate (папка zRotate в архиве).

>- Сначала импортировал рисунок logo.jpg в рабочую область
Ничего пока импортировать не нужно, запустите этот ActionScript, который сам загружает фотографию, с fla ничего делать не нужно, кроме того, чтобы прописать в свойствах класс (обязательно в этом примере найдите, где он прописан).

  Ответить  
 
 автор: cheops   (02.07.2011 в 13:44)   письмо автору
50 Кб
 
   для: pautina   (02.07.2011 в 07:55)
 

Если проект запустить не получится, создайте новый, добавьте fla-файл, выберите классический режим и пропишите AS-скрипт в точке, выделенной красным цветом на изображении. Рядом с fla-файлом должна быть папка rotate, в которой должен находиться скрипт RotateImage.as.

[поправлено модератором: новый вопрос выделен в новую тему]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования