PDA

Просмотр полной версии : Создание маски


Torero
28.11.2007, 21:52
Доброго времени суток. Пытаюсь сделать так, чтобы каждый экземпляр классов, наследуемых от класса "Frame", появлялся на свет божий внутри родительского спрайта и обладал методом addMask(), создающим маскирующий спрайт заданных размеров. Подскажите пожалуйста, где ошибка в коде:


package {
import flash.display.Sprite;
import flash.display.Shape;
public class Frame extends Sprite {
public function Frame(){
var p:Sprite=new Sprite();
p.name="Container";
p.addChild(this);
trace (parent.name); //Container
}

protected function addMask(w:uint, h:uint):void{
trace(parent.name); //Container
var s:Shape=new Shape();
with(s.graphics){
beginFill(0x0000FF);
drawRect(0,0,w,h);
endFill();
}
parent.addChild(s); //на экране ничего не отображается
//mask=s;
}
}
}



package{
import flash.display.Sprite
import flash.events.MouseEvent
public class D extends Frame {
public function D(){
trace(parent.name); //Container
with(graphics){
beginFill(0xFF0000,0.4);
drawRect(0,0,150,200);
endFill();
}
addMask(50,50);

}
}
}

etc
28.11.2007, 23:25
Зачем создавать спрайт, вкладывать себя в него, но не добавлять на сцену получившийся симбиоз?

Torero
29.11.2007, 00:05
1.Зачем создавать:
В этот(родительский) спрайт буду добавлять маску, рамку, скролл и еще всякие разные штуки.
2.А как его добавить?
пытаюсь: "stage.addChild(p);" - ругается
подозреваю, что проблема в: "If a display object is not added to the display list, its stage property is set to null."
-----------------------------------------
в принципе, в том-то и вопрос: как сделать, чтобы экземпляры наследуемых классов создавались вместе с родительскими спрайтами, в которые, по мере надобности, можно подгружать что-то еще..

2morrowMan
29.11.2007, 00:20
где у тебя стоит "stage.addChild(p);" ?

Torero
29.11.2007, 12:14
В конструкторе класса Frame.

2morrowMan
29.11.2007, 13:02
В конструкторе класса Frame.
В конструкторе пишы:

this.addEventListener(Event.ADDED_TO_STAGE, onAddToStage);

Потом добавь в класс обработчик:

private function onAddToStage(event:Event):void
{
var p:Sprite=new Sprite();
p.name="Container";
p.addChild(this);
}

etc
29.11.2007, 13:10
В конструкторе stage всегда неопределен.

Torero
29.11.2007, 14:34
Разобрался. Большое спасибо.

Объясните пжл 1 вещь: почему объект stage не является глобальным? Господа из макромедии считают, что у разных объектов могут быть разные stage или как?

etc
29.11.2007, 16:14
У объектов, которые находятся в памяти, а не на сцене, не может быть никакого stage.