![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 56
|
Помогите пожалуйста, а то голову уже сломал.Увы....Мук мне не помог(((
Вот основной класс Init 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); } } } } 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(); } } } 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); } } } ![]() |
|
|||||
|
Modus ponens
|
Прочитал несколько раз и не понял, что собственно нужно сделать...
Во втором случае trace(super(a)); не должно компилироваться, либо ошибка синтаксиса должна быть, либо несоответствие количества параметров. Если нет ошибки, то это баг, ошибка должна быть. когда вы вызываете super(), вы указываете на то, что сейчас нужно выполнить конструктор суперкласса. Из разных других соображений это нужно писать обязательно первой строчкой в конструкторе. То, что вы описываете, не должно быть возможно даже в теории, т.как у класса может быть неограниченое количество наследников, и он никак не может знать о новых свойствах добавленых в наследниках, может знать только про свои или суперкласса.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 56
|
Цитата:
ЗЫ Вопрос!!!Как мне из класса MoveController прочитать метод и свойства класса RedBox.К примеру меременную с вот исходники если нужно Последний раз редактировалось markII; 03.06.2010 в 13:13. |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 56
|
Тогда подскажите мне можно ли сделать так.Мне надо чтобы у разных мувиков был один мувконтроллер.Т.е. создаются классы ,например, RedBox,GreenSphere,BlueRect.... и т.д.И они должны иметь одинаковый механизм управления MoveController(в примере я привел простейшее перетаскивание).Так вот, если я буду обращаться из класса MoveController к своим расширяющим классам RedBox,GreenSphere,BlueRect.... и т.д, то они все ведь разные и обратиться например так из класса MoveController к переменной RedBox.с я не могу т.к. таких классов много(при условии что с имеет тип static).Подскажите как правильно реализовать такую схему
Последний раз редактировалось markII; 03.06.2010 в 14:19. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Воронеж
Сообщений: 4
|
М.б. в таком случае лучше использовать композицию, а не наследование?
|
|
|||||
|
Регистрация: Nov 2009
Сообщений: 56
|
Цитата:
Добавлено через 20 минут Вобщем, я понял.Из расширяемого класса нельзя считать метод или переменную,но можно в него передать заранее, на этапе инициализации конструктора.Если кому интересно что я собсна хотел получить вот код Расширяющий класс 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); } } } 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|