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

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

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

Регистрация: Nov 2009
Сообщений: 56
По умолчанию Как из расширяемого класса вызвать метод или свойство расширяющего класса

Помогите пожалуйста, а то голову уже сломал.Увы....Мук мне не помог(((
Вот основной класс Init
Код AS3:
package{
	import flash.display.*;
	import flash.geom.*;
	import flash.events.*;
	import flash.utils.*;
 
	public class Init extends Sprite {
 
		public function Init() {
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDoubleClick);
		}
 
		public function onMouseDoubleClick(e:MouseEvent) {
				var rbox:RedBox = new RedBox(mouseX,mouseY);
				addChild(rbox);
			}
		}
	}
}
вот расширяемый класс MoveController
Код AS3:
package{
	import flash.display.*;
	import flash.geom.*;
	import flash.events.*;
 
	public class MoveController extends Sprite {
		public var  a:Number = 6;
 
		public function MoveController() {
                 //что мне здесь нужно написать чтобы получить значение переменной c   метод для ее получения в этом классе?
		}
		public function onMousedown(e:MouseEvent):void {
			e.stopPropagation()
			e.target.startDrag();
		}
		public function onMouseup(e:MouseEvent):void {
			e.stopPropagation()
			e.target.stopDrag();
		}
	}
}
вот расширяющий класс RedBox
Код AS3:
package{
	import flash.display.*;
	import flash.geom.*;
	import flash.events.*;
 
	public class RedBox extends MoveController {
        public var c:Number = 276;
	private var bgColor:uint      		= 0xAE0D0D;
        private var borderColor:uint  		= 0x666666;
        private var borderSize:uint   		= 3;
        private var cornerWidth:uint 		= 16;
	private var cornerHeight:uint 		= 16;
 
		public function RedBox(x:Number,y:Number) {
                        trace(super(a));//Выписывает 6.По идее super вообще можно опустить 
			var child:Shape = new Shape();
			child.name = "RedBox"+x;
			child.graphics.beginFill(bgColor);
			child.graphics.lineStyle(borderSize, borderColor);
			child.graphics.drawRect(x, y, cornerWidth,cornerHeight);
			child.graphics.endFill();
			addChild(child);
			this.addEventListener(MouseEvent.MOUSE_DOWN,onMousedown);
			this.addEventListener(MouseEvent.MOUSE_UP,onMouseup);
		}
	}
}
Если я что -то делаю не так то поправьте меня пожалуйста

Старый 03.06.2010, 06:09
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Прочитал несколько раз и не понял, что собственно нужно сделать...
Во втором случае trace(super(a)); не должно компилироваться, либо ошибка синтаксиса должна быть, либо несоответствие количества параметров. Если нет ошибки, то это баг, ошибка должна быть. когда вы вызываете super(), вы указываете на то, что сейчас нужно выполнить конструктор суперкласса. Из разных других соображений это нужно писать обязательно первой строчкой в конструкторе.
То, что вы описываете, не должно быть возможно даже в теории, т.как у класса может быть неограниченое количество наследников, и он никак не может знать о новых свойствах добавленых в наследниках, может знать только про свои или суперкласса.
__________________
Hell is the possibility of sanity

Старый 03.06.2010, 13:06
markII вне форума Посмотреть профиль Отправить личное сообщение для markII Найти все сообщения от markII
  № 3  
Ответить с цитированием
markII

Регистрация: Nov 2009
Сообщений: 56
Цитата:
Во втором случае trace(super(a)); не должно компилироваться, либо ошибка синтаксиса должна быть, либо несоответствие количества параметров. Если нет ошибки, то это баг
И как быть ?У меня никакой ошибки не выдает.Если это бак то как от него избавиться.(Я уже комп перегружал даже) все равно у меня не выдает ни одной ошибки
ЗЫ Вопрос!!!Как мне из класса MoveController прочитать метод и свойства класса RedBox.К примеру меременную с
вот исходники если нужно
Вложения
Тип файла: rar examle.rar (5.6 Кб, 60 просмотров)


Последний раз редактировалось markII; 03.06.2010 в 13:13.
Старый 03.06.2010, 14:16
markII вне форума Посмотреть профиль Отправить личное сообщение для markII Найти все сообщения от markII
  № 4  
Ответить с цитированием
markII

Регистрация: Nov 2009
Сообщений: 56
Тогда подскажите мне можно ли сделать так.Мне надо чтобы у разных мувиков был один мувконтроллер.Т.е. создаются классы ,например, RedBox,GreenSphere,BlueRect.... и т.д.И они должны иметь одинаковый механизм управления MoveController(в примере я привел простейшее перетаскивание).Так вот, если я буду обращаться из класса MoveController к своим расширяющим классам RedBox,GreenSphere,BlueRect.... и т.д, то они все ведь разные и обратиться например так из класса MoveController к переменной RedBox.с я не могу т.к. таких классов много(при условии что с имеет тип static).Подскажите как правильно реализовать такую схему


Последний раз редактировалось markII; 03.06.2010 в 14:19.
Старый 03.06.2010, 15:01
Ramm вне форума Посмотреть профиль Отправить личное сообщение для Ramm Найти все сообщения от Ramm
  № 5  
Ответить с цитированием
Ramm

Регистрация: Apr 2010
Адрес: Воронеж
Сообщений: 4
М.б. в таком случае лучше использовать композицию, а не наследование?

Старый 03.06.2010, 15:17
markII вне форума Посмотреть профиль Отправить личное сообщение для markII Найти все сообщения от markII
  № 6  
Ответить с цитированием
markII

Регистрация: Nov 2009
Сообщений: 56
Цитата:
М.б. в таком случае лучше использовать композицию, а не наследование?
а что это?

Добавлено через 20 минут
Вобщем, я понял.Из расширяемого класса нельзя считать метод или переменную,но можно в него передать заранее, на этапе инициализации конструктора.Если кому интересно что я собсна хотел получить вот код
Расширяющий класс
Код AS3:
package{
	import flash.display.*;
	import flash.geom.*;
	import flash.events.*;
 
	public class RedBox extends MoveController {
 
		public static var c:int = 276;
 
		private var bgColor:uint      		= 0xAE0D0D;
                private var borderColor:uint  		= 0x666666;
                private var borderSize:uint   		= 3;
                private var cornerWidth:uint 		= 16;
		private var cornerHeight:uint 		= 16;
 
		public function RedBox(x:Number,y:Number) {
			var t = RedBox;
			super(t);//этот метод передает этот класс в расширяемый класс MoveController.Можно передать статическую переменную с таким образом var t = RedBox.c;
			var child:Shape = new Shape();
			child.name = "RedBox"+x;
			child.graphics.beginFill(bgColor);
			child.graphics.lineStyle(borderSize, borderColor);
			child.graphics.drawRect(x, y, cornerWidth,cornerHeight);
			child.graphics.endFill();
			addChild(child);
			this.addEventListener(MouseEvent.MOUSE_DOWN,onMousedown);
			this.addEventListener(MouseEvent.MOUSE_UP,onMouseup);
		}
	}
}
Расширяемый класс
Код AS3:
package{
	import flash.display.*;
	import flash.geom.*;
	import flash.events.*;
 
	public class MoveController extends Sprite {
 
		public var  a:Number = 6;
		private var al;
 
		public function MoveController(t) {
 
			al = t//Здесь я принимаю значения от расширяющего класса.
			trace("al= "+ al)			
		}
		public function onMousedown(e:MouseEvent):void {
			e.stopPropagation()
			e.target.startDrag();
		}
		public function onMouseup(e:MouseEvent):void {
			e.stopPropagation()
			e.target.stopDrag();
		}
	}
}
Как оказалось все не так страшно(для меня).Коля Муков помог))

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

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

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


 


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


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