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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.07.2013, 20:21
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 11  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
По-порядку
ldr - это объект Loader.
ldr.content - это то что вы загрузили в Loade, в вашем случае объект MovieClip;
ldr.width и ldr.height берут свои значения визуального объекта test.swf
опустил trace вниз , потому что вы ниже меняете значения ширины и высоты
Так тоже работает
Код AS3:
stage.scaleMode = "noBorder";
var delitel = 0;
ldr.width = 400;
ldr.height = 200;
var movikWidth = ldr.width;
var movikHeight = ldr.height;
 
 
trace(movikWidth);
trace(movikHeight);
trace("-");
trace(ldr.width);
trace(ldr.height);
 
	ldr.x = (stage.stageWidth - movikWidth)/2;
	ldr.y = (stage.stageHeight - movikHeight)/2;
	addChild(ldr);
Еще момент ldr.contentLoaderInfo ссылается на объект LoaderInfo загружаемой флешки , а свойства width
и height у LoaderInfo только для чтения.
ldr.contentLoaderInfo.width берет значение свойства .stage.width загружаемой флешки .
а когда она загрузилась stage у них становится общий , тот куда она была загружена .


Последний раз редактировалось belv; 04.07.2013 в 20:38.
Старый 04.07.2013, 20:39
StasHappy вне форума Посмотреть профиль Отправить личное сообщение для StasHappy Найти все сообщения от StasHappy
  № 12  
Ответить с цитированием
StasHappy

Регистрация: Jan 2013
Сообщений: 40
belv. Да, но смысл вот в чём.. Если в начале кода(во втором кадре), поставить trace(ldr.content.width) и trace(ldr.content.height) и ради интереса посмотреть, какие же значения возращаются. То мы увидим, что возвращаются размеры 150x150 пикселей,а не 330x250 пикселей. Вот, что у меня получается в процессе компилирования сцены(изображение):
Изображения
 

Старый 04.07.2013, 20:42
StasHappy вне форума Посмотреть профиль Отправить личное сообщение для StasHappy Найти все сообщения от StasHappy
  № 13  
Ответить с цитированием
StasHappy

Регистрация: Jan 2013
Сообщений: 40
Посмотрите слудующие примеры:
Код AS3:
trace(ldr.contentLoaderInfo.width); // возвращает 330 пикселей - правильный размер
trace(ldr.content.width); // возвращает 150 пикселей - неправильный размер. В загружаемой flash'ке, такой размер имеется только у синиго квадрата, по ширине и высоте. Сама же flash'ка имеет размер рабочей области по ширине 330 пикс.
Добавлено через 2 минуты
Возвращаясь к изображению.. Синий квадрат, должен быть ровно по середине рабочей области. Но так как я не могу выставить ширину и высоту загруженной flash'ки, квадрат смещается вправо и позиционируется в окне уже неверно.

Добавлено через 5 минут
Следовательно, используя ldr.content.width, мы не сможем выставить ширину, так как он выставляет ширину не рабочей области flash'ки, а ширину синего квадрата. То же самое и с ldr.content.height. Отсюда и вся неурядица..


Последний раз редактировалось StasHappy; 04.07.2013 в 20:57.
Старый 04.07.2013, 20:53
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 14  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Я так и не понял, чего вы в результате хотите. Зачем вам менять размер рабочей области? Штатными средствами это сделать не получится. Нештатными - вполне. Грузите флешку как массив байт, смотрите заголовок, при необходимости - распакуете, правите в метаданных размер (он в фиксированной позиции после распаковки будет), загружаете как массив байт. Только вот на что именно вы будете править? И какой в этом смысл? Объекты за пределами рабочей области тоже будут видны и сами никуда не переместятся.

Вам или правиьный scollRect нужен, или loader.getBounds(loader)/loader.content.getBounds(loader.content). И центрировать относительно настоящего размера и границ. В реальной задаче и scrollrect и bounds могут понадобиться. Bounds вообще всегда нужны, когда точка привязки не совпадает с левой верхней визуальной границей. А еще некоторые проблемы решаются организационными методами, после которых вторая флешка имеет всегда правильный размер.

Старый 04.07.2013, 21:22
StasHappy вне форума Посмотреть профиль Отправить личное сообщение для StasHappy Найти все сообщения от StasHappy
  № 15  
Ответить с цитированием
StasHappy

Регистрация: Jan 2013
Сообщений: 40
Цитата:
Я так и не понял, чего вы в результате хотите. Зачем вам менять размер рабочей области?
Я хочу загрузить в прелоадер flash'ку. Далее, изменить её размер(подогнать под размер рабочей области прелоадера) и затем, позиционировать её в окне прелоадера. Если ldr.content.width и ldr.content.height возвращают нам не размер рабочей области загруженной flask'ки, а размер синего прямоугольника в загружаемой flask'ке, то следовательно, по логике вещей, с её помощью мы не изменим размер flash'ки, а изменим всего лишь размер синего прямоугольника. А нам этого не нужно. Следующее изображение должно вам наглядно передать мою мысль:
Миниатюры
Нажмите на изображение для увеличения
Название: 777.jpg
Просмотров: 63
Размер:	181.1 Кб
ID:	29785  

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
мда...

имеем 550х400 из свойств width и height объекта contentLoaderInfo
имеем сам конетнт с размерами 150х150
имеем размеры нужного прямоугольника до которого нужно сдать наши 550 и 400 соответственно. например возьмем 300х300;

далее:
content.scaleX = 300/550;
content.scaleY = 300/400;

думается мне что так как-то..
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 04.07.2013, 21:50
StasHappy вне форума Посмотреть профиль Отправить личное сообщение для StasHappy Найти все сообщения от StasHappy
  № 17  
Ответить с цитированием
StasHappy

Регистрация: Jan 2013
Сообщений: 40
Код AS3:
content.scaleX = 300/550;
content.scaleY = 300/400;
Данным способом, изменяется опять же размер синего прямоугольника, а не самой flash'ки. Ребят. Неужели суть проблемы не ясна?

test1.swf я сделал следующим способом. Открыл редактор, назначил в свойствах сцены размеры 330 px по ширине и, 250 px по высоте. Далее вставил прямо в центр сцены прямоугольник синего цвета, со сторонами 150 на 150 px по ширине и высоте. И сохранил в swf формат. То есть в этой flash'ке, у нас имеется только сцена с прямоугольником посередине.

Идём далее. Загружаю данную flash'ку в свой прелоадер и сморю какие размеры показываются. В итоге:
Код AS3:
trace(ldr.content.width); // показывает 150 px, а должен показывать по идее 330px.
trace(ldr.content.height); // показывает 150 px, а должен показывать 250 px.
Ибо 330px и 250px - это размеры моей, толька что созданной flash'ки. Спрашивается, почему нам показываются не те размеры? Почему показываются не размеры самой flash'ки, а размеры синего прямоугольника?..

Старый 04.07.2013, 22:05
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 18  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
А почему Вы не хотите поставить синий квадрат по координатам x=0 y=0 а в загружающей флешке позиционировать так как вы пишете?Чтобы не было смещения.

Старый 04.07.2013, 22:10
StasHappy вне форума Посмотреть профиль Отправить личное сообщение для StasHappy Найти все сообщения от StasHappy
  № 19  
Ответить с цитированием
StasHappy

Регистрация: Jan 2013
Сообщений: 40
Цитата:
А почему Вы не хотите поставить синий квадрат по координатам x=0 y=0 а в загружающей флешке позиционировать так как вы пишете?Чтобы не было смещения.
Потому что в самой flash'ке синий квадрат стоит ровно по центру. А значит и в прелоадере, он тоже должен быть по центру.

Добавлено через 2 минуты
Вся проблема в том, что ldr.content.width возвращает не размер flash'ки, а размер синего прямоугольника. А следовательно, через этот вариант, пытаясь установить новые значения для flash'ки, мы на самом деле установим значения для этого синего прямоугольника. Вы можете сами в этом убедиться.

Старый 04.07.2013, 22:24
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 20  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
если вы зададите ldr.x= 0 и ldr.y =0 , то увидите смещение
относительно верхнего левого угла.Об этом и писал maxkar

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

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

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


 


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


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