Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка TypeError: Error #1010: Термин не определен и не имеет свойств (http://www.flasher.ru/forum/showthread.php?t=179806)

Fartoviy_Spec 22.05.2012 03:46

Ошибка TypeError: Error #1010: Термин не определен и не имеет свойств
 
TypeError: Error #1010: Термин не определен и не имеет свойств.
at MethodInfo-1()
Такая ошибка. Ругается на переменную par как я думаю. Подскажите пожалуйста как исправить

Код AS3:

var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, textLoaded);
urlLoader.load(new URLRequest("xml/kross.xml"));
var xml:XML;
var xmlList:XMLList;
function textLoaded(e:Event):void
{
        xml = XML(urlLoader.data);
        xmlList = xml.zadanie;
        var arr_kletki:Array=new Array();
        var par;
 
        for (var i=0; i<xmlList.length(); i++)
        {
                arr_kletki[i] = [];
                for (var j=0; j<xmlList[i].kletki; j++)
                {
                        var txtField:TextField = new TextField();
                        txtField.width = 28;
                        txtField.height = 28;
                        txtField.border = true;
 
                        if (xmlList[i].polojenie == "gor")
                        {
                                txtField.x = xmlList[i].kor_x * 28 + j * txtField.width;
                                txtField.y = xmlList[i].kor_y * 28;
                        }
                        if (xmlList[i].polojenie == "ver")
                        {
                                txtField.x = xmlList[i].kor_x * 28;
                                txtField.y = xmlList[i].kor_y * 28 + j * txtField.width;
                        }
                        arr_kletki[i][j] = [txtField];
                        addChild(txtField);
                }
        }
        addEventListener(MouseEvent.MOUSE_DOWN, onMD);
        function onMD(e:MouseEvent):void
        {
                for (var i1=0; i1<4; i1++)
                {
                        for (var j1=0; j1<xmlList[i1].kletki; j1++)
                        {
                                if (arr_kletki[i1][j1][0].hitTestPoint(mouseX,mouseY))
                                {
                                        par = i1;
                                }
                        }
                }
 
                addEventListener(Event.ENTER_FRAME, onEnterFrame);
                function onEnterFrame(e:Event):void
                {
                        for (var i2=0; i2<4; i2++)
                        {
                                for (var j2=0; j2<xmlList[i2].kletki; j2++)
                                {
                                        arr_kletki[par][j2][0].borderColor = 0x00FFFF;
                                }
                        }
 
                }
        }
}


ramshteks 22.05.2012 07:19

вы бы еще глубже рефлексией ее закопали. я так понял у вас ее использование находится в функции которая в функции которая в функции?

Вынесите ваши обработчики в одну область видимости, а не городите этот не отлаживаемый ад

Вы js раньше занимались?

Fartoviy_Spec 22.05.2012 12:19

глупая ошибка, просто вместо xmlList[i2] надо было написать xmlList[par]

Не занимался js. А что не правильного в конструкции таких функций?

Aquahawk 22.05.2012 12:35

в том что существует такая вещь как замыкания которые потом провоцируют утечки памяти, а потом начинают всякими изврщенческими методами "чистить память" и "удалять объекты". В частности у вас утечки присутствуют.

Fartoviy_Spec 22.05.2012 12:46

Какие утечки?

Frost47rus 22.05.2012 13:45

Б-же, что за ужасный код?! Страшно представить, как вы думаете.
Объясните нормально, что вы хотите сделать в этом коде?!
(смотрю на строки и мне реально дурно. Что, где, куда идёт - вообще каша)

Aquahawk 22.05.2012 13:52

прочтите и примерьте на свой код. Все локальные переменные попадут в замыкания, а так как вы их нигде не отписываете то лисенер висит а на нём висят ссылки на локальные переменные, это и называется утечка, потому что память утекла.

Fartoviy_Spec 22.05.2012 20:39

Получается что флэшка будет сильно тормозить, из за утечки памяти?

Aquahawk 22.05.2012 21:22

не факт, но когда начнёт тормозить будет уже поздно. Она будет есть больше памяти точно, а когда она станет есть слишком много памяти вы возьмётесь за голову, и будете это переписывать. Короче не нужно так писать. Анонимные функции это зло, не пишите их. От наличия нормального именного метода в классе хуже не станет, лучше точно станет и работать будет быстрее. Только на своей флешке вы это не увидите, она пока меленькая, а вот когда станет большая, тогда и пригодится всё это.


Часовой пояс GMT +4, время: 05:14.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.