Если цель == spr, делать что то. Помогите!

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.
wierusna
Сообщения: 137
Зарегистрирован: 13 ноя 2011, 18:40

Если цель == spr, делать что то. Помогите!

Сообщение wierusna »

Есть функция select. По идеи должно вызывать функцию toolInit, если цель == spr.
Этот самый spr является спрайтом ( public var spr:Sprite=new Sprite() ) и добавляется на сцену после нажатия на кнопку. Их может быть добавлено бесконечное количество (зависит от нажатия кнопки)

Но функция toolInit не вызывается( Как мне записать правильно это }else if (event.currentTarget == spr ??

Код: Выделить всё

public function select(event){    if (event.target is Stage) {        currTool.target = null;    }else if (event.currentTarget == spr) {        currTool.target = event.currentTarget as Sprite;        toolInit();    }}

Код: Выделить всё

public function toolInit():void {currTool.parent.setChildIndex(currTool, currTool.parent.numChildren - 1);         }
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Если цель == spr, делать что то. Помогите!

Сообщение Alazaur »

event.target == spr
wierusna
Сообщения: 137
Зарегистрирован: 13 ноя 2011, 18:40

Re: Если цель == spr, делать что то. Помогите!

Сообщение wierusna »

Alazaur писал(а):event.target == spr
Пробовал...Так и было по началу, но не выходит все равно.
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Если цель == spr, делать что то. Помогите!

Сообщение Alazaur »

весь код отвечающий за добавление спрайтов на сцену. и объявление слушателей скиньте напоглядеть.
wierusna
Сообщения: 137
Зарегистрирован: 13 ноя 2011, 18:40

Re: Если цель == spr, делать что то. Помогите!

Сообщение wierusna »

Спрайты служат контейнерами для картинок, которые подгружаются из XML. (Это сделано для того, что бы их можно было перетаскивать мышью startDrag and stopDrag)
Я эти контейнеры (срайты) хочу трансформировать с помощью TransformTool (Изменять размер, поворачивать и тд.), но никак не могу. Если записать так event.target is Sprite, то будет трансформироваться ВСЕ, что на сцене, включая и mytree, кнопки и прочее, а мне нужно что бы трансформировались ТОЛЬКО spr (контейнеры)

Вот код

Код: Выделить всё

 package {    import flash.display.*;    import flash.events.*;    import com.yahoo.astra.fl.controls.treeClasses.*;    import com.senocular.display.TransformTool;    import fl.events.ListEvent;    import flash.utils.ByteArray;    import flash.net.URLRequest;    import flash.net.URLRequestHeader;    import flash.net.URLRequestMethod;    import flash.net.URLLoader;    import flash.system.LoaderContext    import flash.system.ApplicationDomain    import flash.display.MovieClip;    import flash.display.Loader;    import flash.xml.XMLDocument;    import flash.system.*;    import flash.display.Sprite;    import flash.display.Bitmap;    import flash.display.BitmapData;    import com.yahoo.astra.fl.controls.treeClasses.*;    import vk.api.serialization.json.JSON;    import vk.api.MD5;    import vk.APIConnection;    import vk.events.*;    import vk.ui.*;    import vk.PNGEncoder;     import vk.MultipartURLLoader;    import vk.MultipartURLLoaderEvent;    import vk.api.serialization.json.JSON;    //папку vk можно найти в исходнике.      public class Main extends Sprite    {        //transform tool        public var spr:Sprite=new Sprite()        public var defaultTool:TransformTool = new TransformTool();        public  var currTool:TransformTool = defaultTool;        //transform tool                //turaga vars                public var avaStage:String;//адрес загружаемой картинки из xml        public var ava:Loader = new Loader();//loader картинки из xml        public var avaStage2:String;//адрес загружаемой картинки из xml        public var ava2:Loader = new Loader();//loader картинки из xml                public var XMLLoader:URLLoader = new URLLoader();        public var XMLdata:XML = new XML();        public var XMLLoader2:URLLoader = new URLLoader();        public var XMLdata2:XML = new XML();        public var context:LoaderContext = new LoaderContext();        public var index:MovieClip = new MovieClip();        //turaga vars           public var uploadphoto:VKButton; //обычная кнопка        public var loader:Loader = new Loader();        public var urlforpost:String;//Адрес, на который будем отправлять фотографию, чтобы загрузить в профиль         public var urlofphoto:String;//адрес аватара        public var api_id:Number;        public var viewer_id:Number;        public var sid:String;        public var secret:String;        public var changephotobtn:VKButton; //обычная кнопка        public var profilephoto:Bitmap; //фотография пользователя        public var brr:ByteArray;        //получаем flashvars        public var flashVars:Object = stage.loaderInfo.parameters as Object;        //инициализация        public var VK:APIConnection = new APIConnection(flashVars);                                         //transform tool                // selecting objects on the screen            public function select(event){    if (event.target is Stage) {        currTool.target = null;    }else if (event.currentTarget == spr) {        currTool.target = event.currentTarget as Sprite;        toolInit();    }}     // changing tools using the toolChange button    public function setTool(event:MouseEvent):void {                // unset currTool    currTool.target = null;            toolInit();}     // for setting a new tool    public function toolInit():void {    // raise    currTool.parent.setChildIndex(currTool, currTool.parent.numChildren - 1);        // center registration for customTool    }                //transform tool                                        public function Main()        {            //transform tool            addChild(defaultTool);            addChild(spr);                    //transform tool                        // event handlers for selecting objects and changing tools       stage.addEventListener(MouseEvent.MOUSE_DOWN, select);                         context.securityDomain = SecurityDomain.currentDomain;            context.applicationDomain = ApplicationDomain.currentDomain;                              //переменные приложения             api_id = flashVars['api_id'];            viewer_id = flashVars['viewer_id'];            sid = flashVars['sid'];            secret = flashVars['secret'];            //получаем адрес, на который будем отправлять картинку            VK.api('photos.getProfileUploadServer', {}, geturl, onError);                        addChild(index);            setChildIndex(index, 1);            XMLLoader.addEventListener(Event.COMPLETE, xmlLoaded)            XMLLoader.load(new URLRequest("http://mega-tv.do.am/XMLturaga/img.xml"));            XMLLoader2.addEventListener(Event.COMPLETE, xmlLoaded2)            XMLLoader2.load(new URLRequest("http://mega-tv.do.am/XMLturaga/ava.xml"));         }        private function xmlLoaded(event:Event):void {        XMLdata = new XML(event.target.data);        mytree.dataProvider = new TreeDataProvider(XMLdata);                 mytree.addEventListener(ListEvent.ITEM_CLICK, addClick);                        }                private function xmlLoaded2(event:Event):void {        XMLdata2 = new XML(event.target.data);        mytree2.dataProvider = new TreeDataProvider(XMLdata2);                 mytree2.addEventListener(ListEvent.ITEM_CLICK, addClick2);                        }                        private function addClick (ev:ListEvent) {         if (ev.item.src != null) {                //removeChild(getChildAt(0));        avaStage = (ev.item.src);        var pictLdr:Loader = new Loader();        var pictURLReq:URLRequest = new URLRequest(avaStage);                 var spr:Sprite=new Sprite()        //var spr:Sprite=new Sprite()        spr.x=300;        spr.y=400;            addChild(spr)         pictLdr.load(pictURLReq, context) as MovieClip;                 //addChild(pictLdr);        spr.addChild(pictLdr)         setChildIndex(spr, 1);        spr.addEventListener(MouseEvent.MOUSE_DOWN, startDraging);        spr.addEventListener(MouseEvent.MOUSE_UP, stopDraging);        }   }                                private function addClick2 (ev2:ListEvent) {         if (ev2.item.src != null) {                removeChild(getChildAt(0));        avaStage2 = (ev2.item.src);        var pictLdr2:Loader = new Loader();        var pictURLReq2:URLRequest = new URLRequest(avaStage2);                         //var spr:Sprite=new Sprite()        //spr.x=300;        //spr.y=400;        //addChild(spr)         pictLdr2.load(pictURLReq2, context) as MovieClip;                 //addChild(pictLdr);        //spr.        addChild(pictLdr2)         setChildIndex(pictLdr2, 0);        }   }                                                                                        private function startDraging(e:MouseEvent):void{    e.currentTarget.startDrag();    } private function stopDraging(e:MouseEvent):void{   e.currentTarget.stopDrag();  }          
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Если цель == spr, делать что то. Помогите!

Сообщение Alazaur »

То есть вы создаете спрайт. На который ссылается глобальная переменная spr. Добавляете его этот пустой спрайт на сцену.
Потом по клике на кнопке у вас создаются новые спрайты вы создаете новые локальные переменные тоже с именем spr.
И потом в select хотите сверить не нажали ли мышью на один из этих созданных спрайтов, сравнивая глобальную переменную spr с event.target.
Если я все правильно понимаю то так ничего не выйдет. Как один из вариантов массив в который добавлять создаваемые спрайты. А потом проверять каждый элемент массива на соответствие e.target.
Как еще оин вариант вешать слушатель не на stage а на сами эти спрайты.
Или дать им индивидуальный класс и проверять на соответствие типа e.target.
Или помещатьэти спрайты в контейнер и проверять e.target на родителя.
Выбор за вами вобщем)))
wierusna
Сообщения: 137
Зарегистрирован: 13 ноя 2011, 18:40

Re: Если цель == spr, делать что то. Помогите!

Сообщение wierusna »

Alazaur писал(а): Или помещать эти спрайты в контейнер и проверять e.target на родителя.
Выбор за вами вобщем)))
Это наверное самый легкий вариант будет, так? Я новичок говнокодер... :)
wierusna
Сообщения: 137
Зарегистрирован: 13 ноя 2011, 18:40

Re: Если цель == spr, делать что то. Помогите!

Сообщение wierusna »

Alazaur писал(а): Или дать им индивидуальный класс и проверять на соответствие типа e.target.
Это как?
Примерно так что ли?

Код: Выделить всё

}else if event.target is Индивидуальный класс ) {        currTool.target = event.currentTarget as Sprite;        toolInit();
Только вот как присвоить им этот класс я не знаю...
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Если цель == spr, делать что то. Помогите!

Сообщение Alazaur »

Самый легкий вариант, при создании спрайта вешать на него слушатель, а со stage убрать. Тогда и проверять ничего не придется.
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Если цель == spr, делать что то. Помогите!

Сообщение Alazaur »

wierusna писал(а):
Alazaur писал(а): Или дать им индивидуальный класс и проверять на соответствие типа e.target.
Это как?
Примерно так что ли?

Код: Выделить всё

}else if event.target is Индивидуальный класс ) {        currTool.target = event.currentTarget as Sprite;        toolInit();
Только вот как присвоить им этот класс я не знаю...
Примерно так:

Код: Выделить всё

if(getQualifiedClassName(e.target) == "MyClass")
Но тут вам оно не надо)))
Ответить