Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.02.2011, 19:17
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 11  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Не - там translate надо делать не в p1, а в центр треугольника (если точнее - то в центр OOBB). А почему высота 16 ))) (я знаю что там можно все что угодно кроме 0, но почему именно 16).

Старый 21.02.2011, 19:27
shootkin вне форума Посмотреть профиль Отправить личное сообщение для shootkin Найти все сообщения от shootkin
  № 12  
Ответить с цитированием
shootkin

Регистрация: Apr 2010
Сообщений: 32
16 - 2 в четвертой степени. Просто первое число, которое пришло в голову.
Насчет транслирования в центр треугольника - не понимаю зачем. У меня работает как надо с трансляцией в первую точку, что вполне логично. Градиент получается полный от первой вершины до второй. Попробовал транслировать в центр, градиент получился половинчатым.

Старый 21.02.2011, 19:50
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 13  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Что там творится внутри этого метода?
отвечаю на ваш вопрос:

playerglobal_10.1.swc -> flash.geom.Matrix:
Код AS3:
        public function createBox(scaleX:Number, scaleY:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0) : void
        {
            this.identity();
            this.rotate(rotation);
            this.scale(scaleX, scaleY);
            this.tx = tx;
            this.ty = ty;
            return;
        }
 
        public function createGradientBox(width:Number, height:Number, rotation:Number = 0, tx:Number = 0, ty:Number = 0) : void
        {
            this.createBox(width / 1638.4, height / 1638.4, rotation, tx + width / 2, ty + height / 2);
            return;
        }

Старый 21.02.2011, 19:57
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 14  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Градиент вращается вокруг центра (центр здесь - это центр прямоугольника, заданного в виде width, height), и 'точка регистрации' находится в центре. Когда делаешь translate - ты прибавляешь к уже существующим tx и ty некоторое значение, т.е. неочевидно совершенно какие параметры стали у матрицы. Правильнее жестко задать эти tx и ty.

@i.o.: снова эти магические цифры... Лично мне совсем не понятно что они означают. Особенно эти 1638.4. Зачем это?


Последний раз редактировалось Волгоградец; 21.02.2011 в 20:03.
Старый 21.02.2011, 20:08
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 15  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Сообщение от Волгоградец Посмотреть сообщение
@i.o.: снова эти магические цифры... Лично мне совсем не понятно что они означают. Особенно эти 1638.4. Зачем это?
Мне то откуда знать?

Добавлено через 2 минуты
Волгоградец, зная как работает createGradientBox и как вы не хотели бы чтобы он работал, то можете написать свой вариант. Т.к. все равно используется Matrix.


Последний раз редактировалось i.o.; 21.02.2011 в 20:11.
Старый 21.02.2011, 20:16
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 16  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Цитата:
Мне то откуда знать?
Это был риторический вопрос

createGradientBox оказался простым - вся магия вероятно происходит в beginGradientFill.

Старый 21.02.2011, 20:17
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 17  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Работает для любого прямоугольного треугольника вроде.

Код AS3:
var p1:Point = new Point(50, 250);
var p2:Point = new Point(200, 100); // corner point
var p3:Point = new Point(250, 150);
var d23:Number = Point.distance(p2, p3);
 
var angle:Number = Math.atan2(p3.y - p2.y, p3.x - p2.x);
 
var matrix:Matrix = new Matrix();
matrix.createGradientBox(d23, d23, angle, (p3.x + p2.x) / 2 - d23 / 2, (p3.y + p2.y) / 2 - d23 / 2);
 
graphics.lineStyle(0, 0);
graphics.beginGradientFill(GradientType.LINEAR, [0x000000, 0xffffff], [1, 1], [0, 255], matrix);
graphics.moveTo(p1.x, p1.y);
graphics.lineTo(p2.x, p2.y);
graphics.lineTo(p3.x, p3.y);
graphics.lineTo(p1.x, p1.y);
graphics.endFill();
__________________
Поймай яблоко 2!

Старый 21.02.2011, 20:36
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 18  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Да, тоже вариант. Спасибо.

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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