Страница 1 из 2

Присоединение своего класса

Добавлено: 31 янв 2013, 22:48
dim9044
Не давно начал тренироваться писать по классам приложение. Написал класс LoadDateCat

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

package {        import vk.APIConnection;    import vk.events.*;    import flash.events.*;    import flash.utils.*;    import flash.display.*;    import flash.net.*;    import flash.text.*;        public class LoadDateCat extends Sprite {                var flashVars:Object = loaderInfo.parameters as Object;        var api_id:Number;        var viewer_id:Number;        var sid:String;        var secret:String;                var varLoader:URLLoader = new URLLoader();        var variables:URLVariables = new URLVariables();        var varSend:URLRequest = new URLRequest("http://... ссылка на php скрипт ");                var t:TextField = new TextField();// вывод счетчика посещений                var VK:APIConnection = new APIConnection(flashVars);                public function LoadDateCat() {                        api_id = flashVars['api_id'];            viewer_id = flashVars['viewer_id'];            sid = flashVars['sid'];            secret = flashVars['secret'];                        varLoader.dataFormat = URLLoaderDataFormat.VARIABLES;                        //Отправка id             varSend.method = URLRequestMethod.POST;            variables['viewer_id'] = viewer_id.toString();            VK.api("getServerTime",{},time,error); // вызов времени            varSend.data = variables;                                    varLoader.addEventListener(Event.COMPLETE, onComplete);// после отправки принимаем кол-во посешений                    }                public function onComplete(event:Event):void {            //var testing:int = varLoader.data.events;            t.text = 'Вы посетили это приложение ' + varLoader.data.row + 'раз(а)';            t.width = 400;            t.height = 150;            t.x = 10;            t.y = 150;            t.wordWrap = true;            //t.setTextFormat(format);            addChild(t);// вывод кол-ва посещений            //trace(testing);        }                public function time(response:int){            // отправка времени            varSend.method = URLRequestMethod.POST;            variables['timeChack'] = response.toString();            variables['viewer_id'] = viewer_id.toString();            varSend.data = variables;            varLoader.load(varSend);        }                        public function error(response:Object){            }    }}
если в fla пишу LoadDateCat как главный класс, то все работает как надо, но если пишу главным CATN и в нем:

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

package {    import flash.display.*;    import flash.events.*;        public class CATN extends Sprite {                public function CATN() {                        var LD:LoadDateCat = new LoadDateCat();        }    }} 
То выдает ошибку
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at LoadDateCat()
at CATN()
Подскажите как исправить, 2 день мучаюсь

Re: Присоединение своего класса

Добавлено: 31 янв 2013, 23:43
Alazaur

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

import LoadDateCat
хотя, если файл с классом лежит в одном пакете (чит. в одной папке) с главным классом, то импорты по идее делать не нужно.

Re: Присоединение своего класса

Добавлено: 31 янв 2013, 23:49
dim9044
лежит в одной папке, но если там писать пишет ошибку, говорит статическая ошибка перед as

Re: Присоединение своего класса

Добавлено: 31 янв 2013, 23:57
Alazaur
dim9044, ну да .as конечно же писать не надо, сорри загнался, поправил предыдущий пост. Но все же если оба файла в одной папке и файлы имеют те же имена, что и классы, то такого быть не должно. Классы в одном пакете не нуждаются в импортировании. Если можете закиньте куда-нибудь исходник на посмотреть.

Re: Присоединение своего класса

Добавлено: 01 фев 2013, 00:08
Alazaur
Ааа))) не надо исходник, у вас ругается потому что flashVars не определен. Вы же из воздуха его определить пытаетесь вот тут:

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

var flashVars:Object = loaderInfo.parameters as Object;

Re: Присоединение своего класса

Добавлено: 01 фев 2013, 00:12
dim9044
Alazaur а как это исправить? не понимаю что надо сделать

Re: Присоединение своего класса

Добавлено: 01 фев 2013, 00:23
Alazaur
Например так:
Главный класс.

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

package {    import flash.display.Sprite;    import flash.events.Event;        public class CATN extends Sprite     {                public function CATN():void        {            if (stage) init();            else addEventListener(Event.ADDED_TO_STAGE, init);        }                private function init(e:Event = null):void         {            removeEventListener(Event.ADDED_TO_STAGE, init);            var LD:LoadDateCat = new LoadDateCat(stage.loaderInfo.parameters as Object);        }    }}
LoadDateCat:

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

package {    import flash.display.Sprite;        public class LoadDateCat extends Sprite     {        private var flashVars:Object;                public function LoadDateCat(params:Object):void         {            flashVars = params;        }    }}

Re: Присоединение своего класса

Добавлено: 01 фев 2013, 00:31
dim9044
Как я понял так надо
Главный

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

    package    {        import flash.display.Sprite;        import flash.events.Event;               public class CATN extends Sprite        {                       public function CATN():void            {                if (stage) init();                else addEventListener(Event.ADDED_TO_STAGE, init);            }                       private function init(e:Event = null):void            {                removeEventListener(Event.ADDED_TO_STAGE, init);                var LD:LoadDateCat = new LoadDateCat(stage.loaderInfo.parameters as Object);            }        }    }
LoadDateCat:

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

package{    import flash.display.Sprite;    import vk.APIConnection;    import vk.events.*;    import flash.events.*;    import flash.net.*;           public class LoadDateCat extends Sprite{                var flashVars:Object;        var api_id:Number;        var viewer_id:Number;        var sid:String;        var secret:String;                var varLoader:URLLoader = new URLLoader();        var variables:URLVariables = new URLVariables();        var varSend:URLRequest = new URLRequest("http://dima-n.16mb.com/cat-n/php/user_id.php");                var VK:APIConnection = new APIConnection(flashVars);                   public function LoadDateCat(params:Object):void{                            flashVars = params;            api_id = flashVars['api_id'];            viewer_id = flashVars['viewer_id'];            sid = flashVars['sid'];            secret = flashVars['secret'];                        //Отправка id             varSend.method = URLRequestMethod.POST;            variables['viewer_id'] = viewer_id.toString();            //VK.api("getServerTime",{},time,error); // вызов времени            varSend.data = variables;        }    }} 
Но стал еще больше выдавать ошибок
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at vk::APIConnection()
at LoadDateCat()
at CATN/init()
at CATN()

Re: Присоединение своего класса

Добавлено: 01 фев 2013, 00:39
dim9044
Alazaur Сделал как у вас работает, наверно не так чтото понял щас попробую разобраться

Re: Присоединение своего класса

Добавлено: 01 фев 2013, 00:46
Alazaur
Вот так надо:

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

package{    import flash.display.Sprite;    import flash.events.Event;       public class CATN extends Sprite    {               public function CATN():void        {            if (stage) init();            else addEventListener(Event.ADDED_TO_STAGE, init);        }               private function init(e:Event = null):void        {            removeEventListener(Event.ADDED_TO_STAGE, init);            var LD:LoadDateCat = new LoadDateCat(stage.loaderInfo.parameters as Object);        }    }}

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

package {       import vk.APIConnection;    import vk.events.*;    import flash.events.*;    import flash.utils.*;    import flash.display.*;    import flash.net.*;    import flash.text.*;       public class LoadDateCat extends Sprite {               private var flashVars:Object;        var api_id:Number;        var viewer_id:Number;        var sid:String;        var secret:String;               var varLoader:URLLoader = new URLLoader();        var variables:URLVariables = new URLVariables();        var varSend:URLRequest = new URLRequest("http://dima-n.16mb.com/cat-n/php/user_id.php");               var t:TextField = new TextField();// вывод счетчика посещений               var VK:APIConnection;               public function LoadDateCat(params:Object):void {                       flashVars = params;            VK = new APIConnection(flashVars);                        api_id = flashVars['api_id'];            viewer_id = flashVars['viewer_id'];            sid = flashVars['sid'];            secret = flashVars['secret'];                       varLoader.dataFormat = URLLoaderDataFormat.VARIABLES;                       //Отправка id            varSend.method = URLRequestMethod.POST;            variables['viewer_id'] = viewer_id.toString();            VK.api("getServerTime",{},time,error); // вызов времени            varSend.data = variables;                                  varLoader.addEventListener(Event.COMPLETE, onComplete);// после отправки принимаем кол-во посешений                   }               public function onComplete(event:Event):void {            //var testing:int = varLoader.data.events;            t.text = 'Вы посетили это приложение ' + varLoader.data.row + 'раз(а)';            t.width = 400;            t.height = 150;            t.x = 10;            t.y = 150;            t.wordWrap = true;            //t.setTextFormat(format);            addChild(t);// вывод кол-ва посещений            //trace(testing);        }               public function time(response:int){            // отправка времени            varSend.method = URLRequestMethod.POST;            variables['timeChack'] = response.toString();            variables['viewer_id'] = viewer_id.toString();            varSend.data = variables;            varLoader.load(varSend);        }                      public function error(response:Object){            }    }}
Старайтесь не определять переменные до конструктора, а только объявлять их, тогда подобных проблем у вас не будет. :)