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

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

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

Регистрация: Jul 2012
Сообщений: 112
По умолчанию не меняется ширина объекта

Проблема в том,что при создании дочерних элементов внутри контейнера, я также хочу изменить его ширину, но она не меняется. Почему
Код AS3:
package mvc
{
	import flash.text.TextField;
	import flash.events.Event;
	import flash.display.DisplayObject;//
	import flash.display.Loader;
	import flash.display.Stage;
	import flash.display.MovieClip;
 
 
	public class View
	{
		private var numbSquare:Number;
 
		private var _model:Model;
 
		private var square:Square;
 
		private var container:Container;
 
		private var counter:Number = 0;
 
		private var loopBreak:Boolean = false;
 
		//private var container:MovieClip;
 
		public function View()
		{
			//container = C;
			/*trace(DocumentClass.stage); // [object Stage]
			trace(DocumentClass.root);*/
		}
 
		public function set model(m:Model):void
		{
			_model = m;
			_model.addEventListener(Model.MODEL_CHANGED, update);
		}
 
		private function update(e:Event):void
		{
			container = new Container();
			container.y = 66;
			DocumentClass.stage.addChild(container);
			numbSquare = Number(_model.numbSquare);
			for (var i:int = 0; i < 12; i++)
			{
				if (loopBreak == true)
				{
					trace("Выход из внешнего цикла");
					break;
				}
				for (var j:int = 0; j < 6; j++)
				{
					if (counter == 12)
					{
						loopBreak = true;
						trace("Выход из внутреннего цикла");
						break;
					}
 
					square = new Square();
					square.width = 96;// ширина ячеек
					square.height = 96;// высота ячеек
					square.x = (square.width+5)*j;
					square.y = (square.height+5)*i;
 
					container.addChild(square);
 
					counter++;
				}
			}
			gg();
		}
 
		private function gg():void
		{
			//DocumentClass.stage.width = 606;
			container.width = 606; //ширина контенера
		}
 
		public function get model():Model
		{
			return _model;
		}
 
	}
 
}
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 184
Размер:	50.9 Кб
ID:	28198  

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Ширина контейнера равна ширине содержимого в нем.
Это можно решить такой штукой как scrollRect
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Jul 2012
Сообщений: 112
Ну так на рисунке же видно,что ширина контейнера явно не равна ширине содержимого, а должна, вот я и спрашиваю почему она не равна? а

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Я что-то не понял в чем вопрос значит.
Ширина меняется но не должна или должна но не меняется? Ширина контейнера автоматически будет равняться ширине содержимого.

И что такое контейнер в таком случае?
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 11.07.2012, 22:59
olejan1991 вне форума Посмотреть профиль Отправить личное сообщение для olejan1991 Найти все сообщения от olejan1991
  № 5  
Ответить с цитированием
olejan1991

Регистрация: Jul 2012
Сообщений: 112
В моем случае, если посмотреть код, контейнер это элемент который добавляется на сцену, а затем в него добавляются блоки. Так вот контейнер должен становиться в итоге шириной равной суммарной ширине всех блоков, а он не становится такой шириной. Вот в этом и вопрос: почему он не становится нужной шириной?

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Контейнер это неведомая хрень в данном случае. Какой-то твой класс, который я не вижу в том куске кода который ты скинул.

Вот его бы и посмотреть. А ширина контейнера АВТОМАТИЧЕСКИ ПРИРАВНИВАЕТСЯ К ШИРИНИЕ СОДЕРЖИМОГО ))) Для этого не надо ничего делать абсолютно. Кроме тех случаев если в контейнере какой-то бордюр натянут или еще какая графика. Так же ширина не изменится если этом неведомом классе используется свойство scrollRect - o котором я упоминал выше.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Здесь лучше бы было выложить код самого класса контейнера.

Кстати, по поводу выхода из цикла. Можно не применять флаг, в ас3 есть более удобный, джаваподобный способ отключать любой внешний цикл. Спомощью лейблов.
Лучше написать так:
Код AS3:
outer: for (var i:int = 0; i < 12; i++) // даем циклу название, можно и не outer, это я написал для примера
			{
				for (var j:int = 0; j < 6; j++)
				{
					if (counter == 12)
					{
						break outer; // а тут указываем, какой именно цикл надо отключить
					}
 
					square = new Square();
					square.width = 96;// ширина ячеек
					square.height = 96;// высота ячеек
					square.x = (square.width+5)*j;
					square.y = (square.height+5)*i;
 
					container.addChild(square);
 
					counter++;
				}
			}

Старый 11.07.2012, 23:06
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 8  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
отключать любой внешний цикл. Спомощью лейблов.
О как О_о. Спасибо не знал.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 11.07.2012, 23:20
olejan1991 вне форума Посмотреть профиль Отправить личное сообщение для olejan1991 Найти все сообщения от olejan1991
  № 9  
Ответить с цитированием
olejan1991

Регистрация: Jul 2012
Сообщений: 112
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Здесь лучше бы было выложить код самого класса контейнера.

Кстати, по поводу выхода из цикла. Можно не применять флаг, в ас3 есть более удобный, джаваподобный способ отключать любой внешний цикл. Спомощью лейблов.
За это спасибо

А вот в этом классе как раз и есть код создания контейнера. Сейчас прокоментирую в каком месте

Код AS3:
package mvc
{
	import flash.text.TextField;
	import flash.events.Event;
	import flash.display.DisplayObject;//
	import flash.display.Loader;
	import flash.display.Stage;
	import flash.display.MovieClip;
 
 
	public class View
	{
		private var numbSquare:Number;
 
		private var _model:Model;
 
		private var square:Square;
 
		private var container:Container; // создаем переменную типа Container
 
		private var counter:Number = 0;
 
		private var loopBreak:Boolean = false;
 
		//private var container:MovieClip;
 
		public function View()
		{
 
		}
 
		public function set model(m:Model):void
		{
			_model = m;
			_model.addEventListener(Model.MODEL_CHANGED, update);
		}
 
		private function update(e:Event):void
		{
			container = new Container();  // создаем новый экземпляр класса Container
			container.y = 66; // расположение элемента Container
			DocumentClass.stage.addChild(container); //добавляем, собственно, Container
			numbSquare = Number(_model.numbSquare);
			for (var i:int = 0; i < 12; i++)
			{
				if (loopBreak == true)
				{
					trace("Выход из внешнего цикла");
					break;
				}
				for (var j:int = 0; j < 6; j++)
				{
					if (counter == 12)
					{
						loopBreak = true;
						trace("Выход из внутреннего цикла");
						break;
					}
 
					square = new Square();
					square.width = 96;// ширина ячеек
					square.height = 96;// высота ячеек
					square.x = (square.width+5)*j;
					square.y = (square.height+5)*i;
 
					container.addChild(square);
 
					counter++;
				}
			}
			gg();
		}
 
		private function gg():void
		{
			container.width = 606; //ширина контенера
		}
 
		public function get model():Model
		{
			return _model;
		}
 
	}
 
}
Ну а сам класс контейнер был создан способом таким : нарисован прямоугольник, который в последствии преобразован в символ MovieClip. Вот и все

Старый 11.07.2012, 23:23
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 10  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
а теперь еще раз вниматено прочти мои ответы что я писал про графику.
Ширина контейнера - изменилась. А прямоугольник твой - это тоже содержимое, его надо растягивать отдельно.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

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

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


 


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


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