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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.05.2009, 20:39
Deidara вне форума Посмотреть профиль Отправить личное сообщение для Deidara Найти все сообщения от Deidara
  № 1  
Ответить с цитированием
Deidara

Регистрация: May 2009
Сообщений: 80
По умолчанию Програмное рисование в as3 (Shape, Sprite), центр рисунка

Добрый день. Вопрос таков:

При програмном рисовании (библиотека flash.display.Graphics) в экземпляре класса Shape можно создавать простые фигуры, круг, квадрат, квадрат с закруглёнными краями, линии и прочее...
Пример:
Код AS3:
//Создаётся объект форма 
var circle:Shape = new Shape();
 
//Присвоение свойств кругу
circle.graphics.lineStyle(thickness,color);
circle.graphics.drawCircle(posX, posY, radius);
Созданный объект круг с заданными толщиной линии, цветом, глобальными координатами кординатами, радиусом.

Суть проблемы: При использовании методов scaleX и scaleY (моштабирование относительно начального состояния), происходит не только масштабирование, но и смещение объекта по осям х и у.

Если я правильно понимаю, то это происходит из-за того, что фигура обрамлена некоторым квадратом задающим форму. Центр этого квадрата по умолчанию верхний левый угол. И изменение масштаба происходит относительно него, от чего и появляется илюзия смещения по осям.

Есть ли метод изменения центра формы или какие ни будь другие методы больбы с данной неприятностью?

Буду признателен за ответ ибо не один час ушёл на попытки это исправить.


Последний раз редактировалось iNils; 15.05.2009 в 21:22.
Старый 15.05.2009, 20:46
flash33 вне форума Посмотреть профиль Отправить личное сообщение для flash33 Найти все сообщения от flash33
  № 2  
Ответить с цитированием
flash33
 
Аватар для flash33

Регистрация: Nov 2005
Сообщений: 1,155
Код AS1/AS2:
circle.graphics.lineStyle(thickness,color);
circle.graphics.drawCircle(-radius/2, -radius/2, radius);
circle.x = posX+radius/2;
circle.y= posY+radius/2;
4 минуты


Последний раз редактировалось flash33; 15.05.2009 в 20:55.
Старый 15.05.2009, 20:56
Deidara вне форума Посмотреть профиль Отправить личное сообщение для Deidara Найти все сообщения от Deidara
  № 3  
Ответить с цитированием
Deidara

Регистрация: May 2009
Сообщений: 80
Цитата:
Сообщение от flash33 Посмотреть сообщение
Код AS1/AS2:
circle.graphics.lineStyle(thickness,color);
circle.graphics.drawCircle(-radius/2, -radius/2, radius);
circle.x = posX+radius/2;
circle.y= posY+radius/2;
4 минуты
Спасибо большое!

Старый 15.05.2009, 20:59
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
а че бы и не по центру то рисовать
Код AS3:
circle.graphics.drawCircle(0, 0, radius);
circle.x = posX;
circle.y = posY;

Старый 15.05.2009, 21:01
Deidara вне форума Посмотреть профиль Отправить личное сообщение для Deidara Найти все сообщения от Deidara
  № 5  
Ответить с цитированием
Deidara

Регистрация: May 2009
Сообщений: 80
В таком случае ещё 1 вопрос если не затруднит.
Если по данному принипу делать фабрику объектов, и передавать туда все вышеперечисленные параметры. То центр у кругов будет не общим

Добавлено через 1 минуту
Цитата:
Сообщение от silin Посмотреть сообщение
а че бы и не по центру то рисовать
Код AS3:
circle.graphics.drawCircle(0, 0, radius);
circle.x = posX;
circle.y = posY;
То есть в circle.graphics.drawCircle(0, 0, radius); указываются локальные координаты объекта, а не глобальные коордитаны сцены?

Добавлено через 3 минуты
Спасибо большое, теперь дошло!)))

Старый 15.05.2009, 21:08
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
ну да, будет и что?
scale|rotation применяться относительно начала координат контейнера..
а уж как расположить(или нарисовать) содержимое контейнера относительно начала координат - дело хозяйское

Старый 15.05.2009, 21:20
Deidara вне форума Посмотреть профиль Отправить личное сообщение для Deidara Найти все сообщения от Deidara
  № 7  
Ответить с цитированием
Deidara

Регистрация: May 2009
Сообщений: 80
В данном случае вышло именно то, что требовалось.
Я пытаюсь создать имитацию работы динамиков, 6 кругов увеличиваютстся в первом фрейме на 1.3 и уменьшаются во втром при помощи прослушивателя Event.ENTER_FRAME.
Для этого я создал фабрику кругов и передаю туда параметры. Так как они теперь отрисовываются в центре, дрожание происходит именно так как нужно))

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

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

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


 


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


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