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

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

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

Регистрация: Mar 2013
Сообщений: 290
По умолчанию MovieClip: точное размещение на Stage

Всем привет.

В библиотеке проекта создан мувиклип: Ellipse1
Он имеет аналогичное имя класса и залинкован через галочки "Export for ActionScript".
Сам стэйдж пустой.

В документ-класс помещает такой код:
Код AS3:
package
{
	  import flash.display.*;
	  import flash.events.*;
	  import flash.text.*;
 
	  public class Main extends Sprite
	  {
 
		  private var item1:Ellipse1;
		  private var text1:TextField;
 
		  public function Main()
		  {
 
 
			  item1 = new Ellipse1();
			  item1.x = 200;
			  item1.y = 200;
			  addChild(item1);
 
			  text1 = new TextField();
			  text1.x = 200;
			  text1.y = 200;
			  text1.text = "O = is placed at coordinates: 200, 200";
			  text1.autoSize = TextFieldAutoSize.LEFT;
			  addChild(text1);
 
 
		  }
 
	  }
 
 
}
И видим, что если буква О текста указывает на координаты 200, 200, то сам эллипс расположен иначе.

То есть, объекты из библиотеки помещаются на стэйдж не по координатам верхнего левого угла, а по координатам центра.

Возникают вопросы:

1. Как размещать объект по координатам верхнего левого угла?
Я могу предположить два варианта решения задачи:
- либо создать некую функцию и корректировать постоянно значения координат (с учётом половин ширины и высоты объекта)
- либо же, есть некое программное свойство, перезадающее центр в левый верхний угол.

2. Нужно ли с учётом п.1 при создании объекта в опции (Edit...) смещать сам объект по отношению к центру Edit-области?
Или можно всегда его создавать так, чтобы центр объекта был совмещен с центром Edit-области.

Старый 12.08.2013, 11:41
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 2  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Для отладки текстовых полей всегда включайте
Цитата:
myLittleTextField.border = true;
тогда будет видно реальное местоположение текстового поля.

При создании новых символов (вообще говоря) выбирается точка регистрации:
Название: 346663.image0.jpg
Просмотров: 349

Размер: 13.8 Кб

Старый 12.08.2013, 11:50
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 3  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Ааа, точка регистрации... Щас попробую, спасибо.
Но этот способ работает, если создавать на стэйдж объект, и потом конверт-ту-символ.
А вот если сразу создавать символ, то этой опции нет (или я её в упор не вижу, во Flash CS3 по крайней мере).

А чисто програмно эту точку регистрации можно перезадать? Или только на фазе создания все решается.

Старый 12.08.2013, 11:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
А чисто програмно эту точку регистрации можно перезадать?
Нет.
Цитата:
если сразу создавать символ, то этой опции нет
А зачем? Точка регистрации показана в редакторе, рисуйте относительно неё.
__________________
Reality.getBounds(this);

Старый 12.08.2013, 12:13
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 5  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
А-ха, то есть это не столько центр области редактирования, сколько точка регистрации, понятно.

И если какой-то мувиклип уже создан с регистрацией по центру, то изменить это, видимо, можно только вручную, перетаскивая его в редакторе.

Старый 12.08.2013, 12:16
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 6  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Поверье, это намного проще чем возиться с матрицами преобразований

Старый 12.08.2013, 12:22
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 7  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
KumoKairo, верю на слово : )

Кстати, нашел еще один способ:

Название: snap4939.jpg
Просмотров: 346

Размер: 17.6 Кб

Нужно вручную выставить X = 0 и Y = 0.

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

Регистрация: Mar 2013
Сообщений: 290
Уточняющий вопрос:

Подскажите, верно ли следующее рассуждение?

Функция addChild() будет срабатывать только из основного DocumentClass'a.
(конешно если он расширяет соответсвующий DOС класс).

То есть, addChild() никогда не добавит на Stage некий объект, если он находится внутри другого, неосновного класса?
Получается так, что он будет добавлять себя же в свой же экземпляр, а раз он не stage, то сделать этого не сможет.

Вывод: чтобы добавить что-то на stage из неосновного класса, нужно придумывать хитрые схемы наследований, композиций, паттернов, но на базовом нуб-уровне - этого сделать принципиально нельзя.

Старый 15.08.2013, 15:01
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Функция addChild() будет срабатывать только из основного DocumentClass'a (конешно если он расширяет соответсвующий DOС класс).
Не верно. Она работает в любом классе, у которого в цепочке наследования есть DisplayObjectContainer
Цитата:
То есть, addChild() никогда не добавит на Stage некий объект, если он находится внутри другого, неосновного класса?
Если я правильно понимаю: получается так, что он будет добавлять себя же в свой же экземпляр, а раз он не stage, то сделать этого не сможет.
Несколько раз перечитал, так и не понял полностью этого вопроса. Но суть все равно не верная. Не важно где находится объект, если из другого класса (где есть ссылка на этот объект и stage != null) вызвать stage.addChild(someObject); то этот someObject удалится из того контейнера в котором находится в данный момент, и добавится на stage
Цитата:
Вывод: чтобы добавить что-то на stage из неосновного класса, нужно придумывать хитрые схемы наследования и композиций, паттернов, но на базовом нуб-уровне - этого сделать принципиально нельзя.
Вывод так же не верный. Ничего сложного изобретать не нужно.

Старый 15.08.2013, 15:23
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 10  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
А чисто програмно эту точку регистрации можно перезадать?
Нет.
Не правда. Создам я допустим мувиклип внутри нарисую квадрат ( 100*100) и назначу точку регистрации центр. Квадрат встанет в координаты -50 - 50. Из кода я делаю точку регистрации в левый верхний как :
mc.getChildAt(0).x = 0, y=0; // this is SHAPE
Поижее должно работать.
__________________
Марк Tween

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

Теги
movieclip , размещение , точные координаты
Опции темы
Опции просмотра

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

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


 


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


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