PDA

Просмотр полной версии : Как в суперклассе переписать тип перемнной?


Gary
18.07.2007, 04:30
Расширил класс. Но в суперклассе надо тип переменной поменять с MovieCLip на Sprite.
Игры с super не помогли,

var newVar:Sprite=new Sprite();
newVar= super.oldVar_mc as Sprite.// не работает

Нельзя привести MovieCLip к Sprite потому что MovieClip более расширенный?
кАк поступить? Оставить болтаться пременную просто не хочется.
И еще, не так просто присвоить произвольную переменную Sprite. Как это решается? Я расширил Sprite-вроде бы заработало. Тогда как MovieClip.someVar="bl-bla" запросто работает.
Спасибо!

miramax
18.07.2007, 08:59
Менять типы наследуемых свойств - нельзя.

etc
18.07.2007, 10:00
Я бы сказал, что менять типы любых переменных нельзя :)
Только если это не * или Object… Но там и тип «расплывчатый».

Gary
18.07.2007, 14:54
да, дурной тон менять типы (читал где-то). Но
1. написал я класс, который юзает MovieClip.
2. Второй ПАКЕТ классов написанный независимо, имеет свойсто (переменную типа) -Sprite. В эту переменную я вызываю MovieClip. Однако нельзя!

Выходит, что я не могу никак задействовать первый класс в пакете классов? Очень здорово...
Пример: ручками квадратик нарисовал. Это -MovieClip.
Я же не могу ему назначить Sprite.
Далее я ресайзинг ему делаю -класс для этого написан и т.п. Много чего написано. Третье измерение в ресайзинге я допустим описал также на всяк случай. Естсетвенно компонеты пихнул сюда. Короче сложноватая конструкция -допустим :)).

Но позже я решил сделать 3D куб, допустим. Это класс, где юзается куб с типом Sprite, куб рисуется программно.
НО этот куб я ресайзить первым классом не могу, т.к. приведение типов не сработает.
Выходит даже громоздкие классы в таком случае надо переписывать?

etc
18.07.2007, 15:20
В эту переменную я вызываю MovieClip.
У меня после этой фразы смысл всего поста испарился.

Gary
18.07.2007, 18:47
а если подумать? щаз напишу на примере.
---------------------------------------
хотя однозначно цифра 14188 постов способствует росту процессов испарения. А должно наоборот. Но это не здесь очевидно.

Gary
18.07.2007, 19:12
package
{
public class A extends MovieClip
{
var myMC:MovieClip;
public function A(){ }

public function setComponents(myMC:MovieClip)
{
this.myMC=myMC;// myMC нарисован ручками, Sprite низзя
}

public function getMC():MovieClip
{return myMC;}
}
}

//второй класс
package
{
import flash.display.Sprite;
import A;
public class B extends Sprite
{
var mySP:Sprite;
var a:A;
public function B(){ }
public function ini():void{
a=new A();
mySP=a.getMC()// нельзя
mySP= a.getMC() as Sprite //нельзя
//super (если банально расширить класс A,
// тоже не приведет к возможности сменить тип переменной.
//какой выход?
}
//здесь методы непосредственно работающие с объектом mySP.

}
}

выходит что написав класс когда-то допустим и,
желая спустя время его прикрутить к другим я
очень даже возможно столкнусь с проблемой прив-
еденя типов (не всегда но вот можно же). Понятно
также что совершенно разные типы и то можно поиграть-
ся, например
var s:String;
var n:Number;
s="4";
n=Number(s).
Но вот рядом стоящие по сути классы Sprite и MovieClip и созданные таких типов объеты в разных классах вызывают у меян вопросы...

etc
18.07.2007, 19:13
Gary, отредактируйте свой пост и оформите код тегами .

Для начала неплохо было бы создать этот самый myMC.

BlooDHounD
18.07.2007, 19:17
эй, чувак! твой речевой аппарат выдаёт грандиозные перлы!
а про написанный тобою код я вообще молчу. что бы твои "нельзя" стали "можно" нужно что бы myMC был определён для начала.

Gary
18.07.2007, 20:12
2 __etc: мне представляется вы человек взрослый, общайтесь без спеси, пожалуйста, и все будет ОК.
Не надо тут меня лечить про создание клипов-оно вам надо читать банальности про то как клипы в среде на таймлайне создаются? Давайте по сути, если вам есть что сказать.
Уберите пожалуйстав свой пост про улетучившийся смысл, я как видите удалил свои комменты, уважая вашу сторону. Надеюсь на взаимность.
Просьба за "чувака" влепить + Cобаке. Караван идет, зачем нам они?

Добавлю для ясности -это все работает и варианты конечно же есть решений, по ходу просто вопросы возникли. Меня интересуеит конструктивный ответ. Нет его-закройте тему и все.
Как все-таки одинкаовы люди - мало бывает если на формах чел -значит мы круче! БУ_ГА_ГА!

etc
18.07.2007, 22:34
Кому и какие плюсы ставить решаю я, а не вы. Это первое.
Второе: вы явно считаете своих собеседников идиотами и «снизошли» до объяснения того, чего вы хотите, мол, «так и быть, объясню вам, дуракам».
А на самом деле вы просто не умеете описывать проблему терминами, понятными любому программисту, предпочитая придумывать свои. А если вас не понимают, то считаете, что с вами разговаривает ламер, ничего не понимающий в программировании. Вы вообще должны сказать спасибо, что на вашу тему обратили внимание.
В связи с этим вы получаете плюс и бан на месяц, для профилактики и изучения общепринятых терминов. А также учиться уважать своих собеседников и понимать, что люди вокруг вас далеко не все идиоты и ламеры. Ваш снобизм нам не нужен.

Тема закрыта.

miramax
18.07.2007, 22:40
Что мешает программно программно засунуть myMC в спрайт и делегировать вызовы необходимые в myMC ?
Можно проще, если определить myMC как спрайт
public var myMC:Sprite
и кастить myMC в MovieClip в нужные моменты