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

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

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

Регистрация: Aug 2013
Сообщений: 4
Cool Не изменяются значения width,height Sprite-а

Здравствуйте, имею код
Код AS3:
public class ListBox extends Sprite
	{
 
		...
		public function ListBox(_width:int = 100,_height:int = 100) 
		{
 
			super();
			this.width =  _width as int;
			width = _width;
			this.height = _height;
 
			...
		}
........

при вызове конструктора, свойства width,height должны изменяться, но как вы поняли и заголовка, этого не происходит, почему?

Заранее спасибо за помощь.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
У пустоты нет ширины и высоты.
__________________
Reality.getBounds(this);

Старый 28.08.2013, 02:48
lid вне форума Посмотреть профиль Отправить личное сообщение для lid Найти все сообщения от lid
  № 3  
Ответить с цитированием
lid

Регистрация: Aug 2013
Сообщений: 4
При инициализации это уже не пустота?!

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
_width as int;
Вот эта конструкция совершенно бессмысленна, так как параметр _width уже определен как int.
Да и добавлять андерскор _ к названиям параметров - это не по конвенции.

По вопросу, что же происходит в сеттерах width и height спрайта при их вызове
Создан новый спрайт. Значения его высоты и ширины при этом = 0.
0 * 100 = ? сколько будет? Сто, или всё же ноль?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
При инициализации это уже не пустота?!
Я не вижу, чтоб ее заполнили.
Это не то же самое, как создавать новый документ в фотошопе (или флэше, да), когда Вы указываете размеры рабочей области. У контейнера нет рабочей области; пока в нем нет содержимого, его ширина и высота ноль.
Когда Вы создаете новый Shape, история та же — невозможно задать ширину и высоту пустоте. Вам надо хоть что-нибудь нарисовать в этом шейпе, и все появится.
Как должно выглядеть на экране "ширина=300" у объекта, который абсолютно пуст? Ему нечего сужать или растягивать. У него нет ни одного пикселя, даже прозрачного.
ОК, объясните, чего Вы на самом деле хотите. Чтобы видимая область контейнера, когда в него напихают объектов, была 100х100, а все за этими рамками обрезалось? Задайте scrollRect или примените маску.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 28.08.2013 в 09:27.
Старый 28.08.2013, 13:56
lid вне форума Посмотреть профиль Отправить личное сообщение для lid Найти все сообщения от lid
  № 6  
Ответить с цитированием
lid

Регистрация: Aug 2013
Сообщений: 4
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Вот эта конструкция совершенно бессмысленна, так как параметр _width уже определен как int.
Да и добавлять андерскор _ к названиям параметров - это не по конвенции.

По вопросу, что же происходит в сеттерах width и height спрайта при их вызове
Создан новый спрайт. Значения его высоты и ширины при этом = 0.
0 * 100 = ? сколько будет? Сто, или всё же ноль?
Это мои отчаянные попытки изменить данные свойства

Добавлено через 14 минут
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Я не вижу, чтоб ее заполнили.
Это не то же самое, как создавать новый документ в фотошопе (или флэше, да), когда Вы указываете размеры рабочей области. У контейнера нет рабочей области; пока в нем нет содержимого, его ширина и высота ноль.
Когда Вы создаете новый Shape, история та же — невозможно задать ширину и высоту пустоте. Вам надо хоть что-нибудь нарисовать в этом шейпе, и все появится.
Как должно выглядеть на экране "ширина=300" у объекта, который абсолютно пуст? Ему нечего сужать или растягивать. У него нет ни одного пикселя, даже прозрачного.
ОК, объясните, чего Вы на самом деле хотите. Чтобы видимая область контейнера, когда в него напихают объектов, была 100х100, а все за этими рамками обрезалось? Задайте scrollRect или примените маску.
Я хотел создать контейнер в котором в зависимости от его параметров ширины и высоты, рассчитывались размеры объектов.

Решил проблему вставив после super() следующий код

Код AS3:
this.graphics.lineStyle(NaN, 0xffffff, 0)
this.graphics.drawRect(0, 0, _width, _height);

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Так вот в природе все ровно наоборот — в зависимости от ширины и высоты объектов контейнер возвращает свой width и height.
"Рассчитывать" размеры объектов, подгоняя их в нужный прямоугольник, Вы будете в этом же классе? Не сами же они (надеюсь) устанавливают собственные размеры, запрашивая данные у родителей, типа parent.width? А если так, то у вас есть переменные _width и _height, в которых есть эти размеры области, считайте на здоровье.
И даже если рисовать прозрачную область в графиксе контейнера, то я бы не связывался с обводкой. Лучше нарисуйте прозрачную заливку beginFill/drawRect без обводки, чтобы не иметь проблем с точностью размеров, особенно при масштабировании.
__________________
Reality.getBounds(this);

Старый 31.08.2013, 21:03
lid вне форума Посмотреть профиль Отправить личное сообщение для lid Найти все сообщения от lid
  № 8  
Ответить с цитированием
lid

Регистрация: Aug 2013
Сообщений: 4
Именно так они и делают, размер меняется только у контейнера с содержимым ListBox и у линии по которой будет ходить ползунок, остальные элементы управления на основании _width и _height рассчитывают свои координаты по осям x,y.
Цитата:
Не сами же они (надеюсь) устанавливают собственные ...
Как же сделать правильно ?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
остальные элементы управления на основании _width и _height рассчитывают свои координаты
А откуда они узнают, что размеры контейнера изменились?)) Уж не запрашивают ли их на каждый ентерфрейм?
Дети — подчиненные родителя (контейнера или создающего их класса-менеджера, который может и не быть их физическим контейнером, пихая их еще куда-то, не суть). Подчиненные. Они не должны ничего решать сами, кроме собственного пищеварения. Они не могут решать, ГДЕ им быть и КОГО дергать. Это решает родитель. Иначе хаос, то есть полная противоположность программированию.
__________________
Reality.getBounds(this);

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

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

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


 


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


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