Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.06.2013, 11:21
art_maestro вне форума Посмотреть профиль Отправить личное сообщение для art_maestro Найти все сообщения от art_maestro
  № 1  
Ответить с цитированием
art_maestro

Регистрация: Mar 2013
Сообщений: 157
По умолчанию Область видимости. Доступ к методам

Здравствуйте

Подскажите пожалуйста, как сделать видимым метод класса, в другом классе.

Например
имеется класс
Код AS3:
(файл 1)
 
public class clBuildingList {
 
       public function  clBuildingList(category:int, page:int) {
          // код
        }
 
          public function methClass1() {
 
                   // код
         }
}
 
(файл 2)
 
public class clBuilding{
 
       public function meth1() {
 
                   btImg.addEventListener(MouseEvent.CLICK, <Здесь вызвать метод methClass1>);
 
        }
 
}

Я делал следующим образом:
1. Импортирывал в Файл 2, файл 1
2. Вызывал methClass1 (в файле 2) через экземпляр класса clBuildingList, но возникала ошибка, я так понял это было связано с тем, что при создании экземпляра класса clBuildingList вызывается, ясное дело конструктор, что мне не нужно.

При обращении clBuildingList.methClass1() - тоже ошибка, да и флеш вообще не видет данный метод, хотя он в файле является public.

Подскажите как решить Эту проблему.

Спасибо

Старый 12.06.2013, 11:54
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
При обращении clBuildingList.methClass1() - тоже ошибка, да и флеш вообще не видет данный метод, хотя он в файле является public.
Так вызываются методы класса(объявленные через static), а у Вас clBuildingList принадлежит экземпляру - пока ссылки на экземпляр, созданный через new clBuildingList() не будет - вы его вызвать не сможете - не работают такие методы, если они не знают с каким экземпляром работать.

Допишите static к public'у

Старый 12.06.2013, 11:59
art_maestro вне форума Посмотреть профиль Отправить личное сообщение для art_maestro Найти все сообщения от art_maestro
  № 3  
Ответить с цитированием
art_maestro

Регистрация: Mar 2013
Сообщений: 157
Вы хотите сказать, что methClass1 нужно сделать статическим?

Старый 12.06.2013, 12:00
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Угу,
или экземпляр clBuildingList создать и вызывать у него.
P.S. Называйте классы с большой буквы и без C - подавляющее большинство так делает, пришло из явы: BuildingList
Переменные/Методы/Поля - с маленькой - так что и без дурацкой приставки cl не спутаете класс ни с чем.
Да оно и в C#, где методы тоже принято называть с большой буквы, у классов не делают никаких приставок, означающих, что это класс, у интерфейсов только приписывают I(как и в as3)

Старый 12.06.2013, 12:07
art_maestro вне форума Посмотреть профиль Отправить личное сообщение для art_maestro Найти все сообщения от art_maestro
  № 5  
Ответить с цитированием
art_maestro

Регистрация: Mar 2013
Сообщений: 157
Через экземпляр у меня не получилось вызвать. Выдает ошибку
Обращение возможного неопределенного свойства loadBilding через ссылку со статическим типом src:clBuilding .

Вызвал следующим образом: clBuildingList.methClass1

Вроде как получилось, только все переменные, которые находятся в методе methClass1 должны я так понял тоже быть статическими.

З.Ы. Спасибо за совет

Старый 12.06.2013, 12:09
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Надо жеж переменную loadBilding или поле(свойство) объявить там где используете.

Цитата:
Вроде как получилось, только все переменные, которые находятся в методе methClass1 должны я так понял тоже быть статическими.
Возможно вы хотели сказать:
"Вроде как получилось, только все поля(их переменными тоже называют), которые используются в методе methClass1 должны я так понял тоже быть статическими."
(Просто внутренние переменные статического метода ничем не отличаются от переменных нестатического)

А как по Вашему flashplayer должен угадать, с каким экземпляром будет работать этот статичный метод?
Нестатичные поля - они пренадлежат экземпляру - а экземпляров Вы можете наделать сколько угодно.

Старый 12.06.2013, 12:16
art_maestro вне форума Посмотреть профиль Отправить личное сообщение для art_maestro Найти все сообщения от art_maestro
  № 7  
Ответить с цитированием
art_maestro

Регистрация: Mar 2013
Сообщений: 157
Да. Сейчас все изменяю. все через статик делаю.

loadBilding - это метод ( если смотреть по примеру указанному выше, то это будет methClass1 )

Старый 12.06.2013, 12:20
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Да, статический метод не может дергать нестатический. Т.к. нестатическому надо знать экземпляр, с которым он работает.

Старый 12.06.2013, 12:20
art_maestro вне форума Посмотреть профиль Отправить личное сообщение для art_maestro Найти все сообщения от art_maestro
  № 9  
Ответить с цитированием
art_maestro

Регистрация: Mar 2013
Сообщений: 157
Да все получилось. Спасибо огромное.

Добавлено через 27 часов 56 минут
Но не до конца работает.

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

Например,

Работали функции, создания домика, перемещения (когда они не были статическими), когда поставил статические, то функция создания осталась, а перемещения не работает.

У меня вопрос, как можно другим способом обратиться к методу класса?

Добавлено через 28 часов 23 минуты
Все сделал.

Решил благодаря данному примеру
Код AS3:
в AnyClass:
public static var main:КлассMain;
 
в конструкторе Main:
 
public function Main()
{
AnyClass.main = this;
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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