Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   обращение к переменной другого класса (http://www.flasher.ru/forum/showthread.php?t=211168)

бакуард 06.07.2015 19:35

обращение к переменной другого класса
 
Доброго времени суток!!!

Из главного класса обращаюсь к переменной определённой в другом классе (имя переменной pozition1OfMatch);
Код AS3:

/*расположим город*/
        var sityMatch:SityMatchClass = new SityMatchClass();
        sityMatch.x = ArrayOfCell[pozition1OfMatch].x;
        sityMatch.y = ArrayOfCell[pozition1OfMatch].y;
        main.addChild(sityMatch);

Вот класс в котором определенна эта переменная:
Код AS3:

package cellAndRoadPG.sityPG {
 
        public class SityMatchClass extends SityMatch {
 
                private var sityMatch = this;
 
                public var pozition1OfMatch:Number ;//номер ячейки массива в котором расположена клетка местности
                public var pozition2OfMatch:Number;//номер ячейки массива в котором расположена клетка местности
                public function SityMatchClass (){
                        var pozition1OfMatch = Math.floor(Math.random() * 110 - 1);
                        var pozition2OfMatch = Math.floor(Math.random() * 110 - 1);
                        if(pozition1OfMatch < 0){
                                pozition1OfMatch = 0;
                        }
                        if(pozition2OfMatch < 0){
                                pozition2OfMatch = 0;
                        }
                }
        }
}

Выдает ошибку 1120: Access of undefined property pozition1OfMatch.

P.S. класс SityMatchClass импортирован в главный класс. Проверял, с импортом все нормально.

Пожалуйста, кто может подскажите в чем ошибка.

AlexCooper 06.07.2015 19:38

Код AS3:

sityMatch.x = ArrayOfCell[pozition1OfMatch].x;
        sityMatch.y = ArrayOfCell[pozition1OfMatch].y;

замените на
Код AS3:

sityMatch.x = ArrayOfCell[sityMatch.pozition1OfMatch].x;
        sityMatch.y = ArrayOfCell[sityMatch.pozition1OfMatch].y;

Добавлено через 5 минут
да и кстати
Код AS3:

public function SityMatchClass (){
                        var pozition1OfMatch = Math.floor(Math.random() * 110 - 1);
                        var pozition2OfMatch = Math.floor(Math.random() * 110 - 1);
                        if(pozition1OfMatch < 0){
                                pozition1OfMatch = 0;
                        }
                        if(pozition2OfMatch < 0){
                                pozition2OfMatch = 0;
                        }
                }

следует убрать var так как данная инструкция создает локальные переменные, а не отдает ссылки на публичные pozition1OfMatch и pozition2OfMatch

Код AS3:

package cellAndRoadPG.sityPG {
 
        public class SityMatchClass extends SityMatch {
 
                private var sityMatch = this;
 
                public var pozition1OfMatch:Number ;//номер ячейки массива в котором расположена клетка местности
                public var pozition2OfMatch:Number;//номер ячейки массива в котором расположена клетка местности
                public function SityMatchClass (){
                        pozition1OfMatch = Math.floor(Math.random() * 110 - 1);
                        pozition2OfMatch = Math.floor(Math.random() * 110 - 1);
                        if(pozition1OfMatch < 0){
                                pozition1OfMatch = 0;
                        }
                        if(pozition2OfMatch < 0){
                                pozition2OfMatch = 0;
                        }
                }
        }
}


бакуард 06.07.2015 20:34

Спасибо за быстрый ответ, но ваши советы не дали результатов. Может быть проблема ещё в чем-нибудь.

P.S. ещё раз проверил импорт классов, все нормально.

neonoviiwolf 06.07.2015 22:50

Выложите то, что написали после применения советов
а вообще довольно удобно get/set использовать

samana 06.07.2015 23:22

Цитата:

Сообщение от бакуард (Сообщение 1184516)
Код AS3:

sityMatch.x = ArrayOfCell[pozition1OfMatch].x;


Я не совсем понимаю, как переменную можно передать в массив по ссылке, ведь Number это не ссылочный тип. И откуда там взялось ArrayOfCell[pozition1OfMatch].x? Что конкретно храниться в массиве ArrayOfCell?

бакуард 07.07.2015 11:03

Спасибо за помощь Samana!
В массиве ArrayOfCell хранятся объекты (клетки ландшафта из которых состоит клеточная карта).
Я подумал что будет удобней при создании каждой клетки сразу добавлять их в массив, чтобы потом легко было обращаться к каждой из них (P.S. массив одномерный). А переменная pozition1OfMatch - задумывалась,как случайно генерируемое число от 0 до 99, чтобы вот в такой конструкции:
Код AS3:

sityMatch.x = ArrayOfCell[pozition1OfMatch].x;

обращаться к случайной клетке(ссылка на которую
хранится в массиве) и присваивать будущему объекту sityMatch координаты этой клетки.
Наверное я сильно запутался. Извините если пишу откровенную ерунду.

Добавлено через 37 минут
Цитата:

Я не совсем понимаю, как переменную можно передать в массив по ссылке, ведь Number это не ссылочный тип.
На этот счет я нашел в документации от adobe следующее(если я правильно понял вас):
Цитата:

Также в квадратных скобках можно использовать переменную вместо конкретного значения. (Переменная
должна содержать неотрицательное целое число, например беззнаковое целое число, положительное целое
число или экземпляр Number, представленный положительным целым числом.)

Wolsh 07.07.2015 12:57

Из этого Вы должны были сделать вывод, что переменным pozition1OfMatch и pozition2OfMatch нужно назначить тип uint а не Number. Хоть это и не критично, но всё же неправильно, индекс в массиве не может иметь дробную часть.

бакуард 07.07.2015 13:12

Спасибо Wolsh!
В действительности я был не внимателен. Сейчас же попробую предложенный вами вариант.

samana 07.07.2015 16:20

Цитата:

Сообщение от бакуард (Сообщение 1184568)
Цитата:

Также в квадратных скобках можно использовать переменную вместо конкретного значения.

Да, конечно это правда. Но когда вы передается в квадратные скобки переменную, то в квадратные скобки передаётся просто значение этой переменной и связи с ней больше не существует.
Но как я вижу, это не касается вашего кода. Я думал, что вы просто заносите в массив числовую переменную, пытаясь ещё вытянуть из неё "x" и "y")
А разве вариант, предложенный AlexCooper, не сработал?

бакуард 08.07.2015 08:18

Извиняюсь Samana, не мог сразу ответить.
Нет, вариант предложенный AlexCooper не помог.


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

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