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

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

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
По умолчанию В один объект добавить другой из отдельного класса

Нужно в один объект добавить другой из отдельного класса. Код упростил максимально как мог. Делаю так:
Основной класс:
Код AS3:
package {
	import flash.display.Sprite;
	import Resizer;
	public class Main extends Sprite {
		var elast:Resizer=new Resizer();
		public var obj1:Obj=new Obj(0x0000ff);
		public var obj2:Obj=new Obj(0xff0000);
		public function Main():void {
			addChild(elast);
			obj1.x=obj1.y=10;
			obj1.width=obj1.height=200;
			elast.addEl(obj1,this);
			obj2.x=obj2.y=15;
			obj2.width=obj2.height=30;
			elast.addEl(obj2,obj1);
		}
	}
}
Класс, который собственно должен добавлять объекты
Код AS3:
package {
	import flash.display.Sprite;
	import flash.display.DisplayObject;
	public class Resizer extends Sprite {
		private var buferObj:Sprite=new Sprite();//переменная для приведения типов
		public function Resizer():void {
		}
		public function addEl(_obj:DisplayObject,_targ:DisplayObject=null):void {
			buferObj=_targ as Sprite;
			buferObj.addChild(_obj);
			trace(_obj,_obj.name,_targ,_targ.name);
		}
	}
}
Выводит на trace:
Код:
[object Obj] instance3 [object Main] root1
[object Obj] instance5 [object Obj] instance3
И класс объекта, ничего особенного
Код AS3:
package {
	import flash.display.Sprite;
	import flash.display.Shape;
	public class Obj extends Sprite {
		public function Obj(_col:uint):void {
			var fig:Shape=new Shape();
			addChild(fig);
			fig.graphics.beginFill(_col);
			fig.graphics.drawRect(0,0,1,1);
			fig.graphics.endFill();
		}
	}
}
При всем при этом на сцене отображается только один (1й) квадрат. Если добавлять в основной класс - все отображается хорошо. В будущем планируется переопределять размеры объектов в зависимости от размера сцены (если это имеет значение).

Заранее спасибо всем откликнувшимся.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 17.12.2009, 19:26
GentleFLASH вне форума Посмотреть профиль Отправить личное сообщение для GentleFLASH Найти все сообщения от GentleFLASH
  № 2  
Ответить с цитированием
GentleFLASH

Регистрация: Apr 2009
Сообщений: 117
Хаха) Вообще то все добавляется и создается, только есть одно но - позиция у второго символа будет x = obj1.x + obj1.width*obj2.x (по y аналогично), т.е в данном случае x = y = 10 + 200*15. Потому что меняя width или height, меняется и scaleX и scaleY. В данном случает стоит переопределить эти сеттеры и будет все круто))


Obj.as:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.display.Shape;
 
 
	public class Obj extends Sprite
	{
		public function Obj( _col:uint=0x000000 ):void
		{
			super();
 
 
			i_color = _col;
 
			fig = new Shape();
			addChild(fig);
 
			reDraw();
		}
 
 
 
		protected var fig			:Shape;
 
		protected var f_width		:Number = 1.0;
		protected var f_height		:Number = 1.0;
		protected var i_color		:uint;
 
 
 
		override public function set width( value:Number ):void
		{
			f_width = value;
 
			reDraw();
		}
 
		override public function set height( value:Number ):void
		{
			f_height = value;
 
			reDraw();
		}
 
 
		public function reDraw():void
		{
			fig.graphics.clear();
			fig.graphics.beginFill( i_color );
			fig.graphics.drawRect( 0, 0, f_width, f_height );
			fig.graphics.endFill();
		}
	}
}

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Интересно откуда такая формула. Логики вроде никакой.
Надо будет помозговать, что б постараться обойтись без перерисовки...
И можно ли "обнулить" масштаб, т.е. что б не изменяя реальных размеров, масштаб составлял 100%.

Добавлено через 17 часов 55 минут
Кажется я понял. Без перерисовки в том виде, который я описываю сделать не получится. При этом при добавлении нового объекта к уже масштабированному его пропорции будут также масштабированы. Надо поиграться с формулами и свойствами...
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!


Последний раз редактировалось TanaTiX; 19.12.2009 в 17:29.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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