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

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

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

Регистрация: Feb 2015
Сообщений: 63
По умолчанию Общая переменная для классов

Приветствую! Перешел к размещению кода к классам(выполняют разные задачи) и необходимо задать для всех классов одну общую переменную (чтобы они общались ), пробовал импортировать класс и оперировать значением класс.переменная, но выдает ошибку. Как вы вообще решаете такие задачи по общению классов?

Старый 09.03.2015, 23:58
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Можно попробовать статическими переменными.

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

Регистрация: Feb 2015
Сообщений: 63
Достаточно будет записать такую static var переменную в основном классе? Будет ли она трактоваться в зависимости от приватности класса, который захочет её изменить?

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

Регистрация: Jun 2014
Сообщений: 558
ну можно по разному, мне хватает пока
Код AS3:
package {
         import StartClass.StartDaubClass;
         public class main {
                  private var daub: StartDaubClass;
                  private var i: Number = 10;
                  public function main(){
                            daub =  = new StartDaubClass(i)  //отправляете ссылку на i в этот экземпляр классаStartDaubClass
                  }
       }
}
Код AS3:
package {
         public class StartDaubClass {
               private var i: Number;
               public function StartDaubClass (_i){
                      i = _i;                                             //тут собственно вы и пересылаете ссылку на на переменную, можно так переслать и ссылки на экземпляры класса
               }
        }
}
писал без проверки

Старый 10.03.2015, 00:48
Фомич вне форума Посмотреть профиль Отправить личное сообщение для Фомич Найти все сообщения от Фомич
  № 5  
Ответить с цитированием
Фомич

Регистрация: Feb 2015
Сообщений: 63
Спасибо попробовал, но мне требуется передать данные в реальном времени между классами, а здесь получается от основного класса передается другим. Например в одном из классов изменилась переменная и её значение можно использовать везде.
Код AS3:
package {
         import StartClass.StartOneClass;
         import StartClass.StartTwoClass;
         public class main {
                  private var daub1: StartOneClass;
                  private var daub2: StartTwoClass;
                  private var i: Number = 10;
                  public function main(){
                            daub1 = new StartOneClass(i)  // начальное значение i =10
                            daub2 = new StartTwoClass(i)  // начальное значение i =10
                  }
       }
}
И вот теперь надо как то изменив значение i в одном из классов Start...Class чтобы другие классы увидели. Суть проблемы такова, что по событию в StartOneClass нужно изменить переменную в StartTwoClass...

Старый 10.03.2015, 00:55
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 6  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
измените в одном классе и измениться во всех, а чтоб класс отреагировал нужен слушатель событий
что-то типо
Код AS3:
stage.addEventListener(Event.ENTER_FRAME, eventFunction);
private function eventFunction(e: Event): void{
      if (i == 9) // этот слушатель событий будет каждый кадр проверять "не равно ли i 9", что бы выполнить код ниже
            //ваш код
}

если у вас код будет ругаться, то нужно
Код AS3:
package {
         import StartClass.StartOneClass;
         import StartClass.StartTwoClass;
         public class main {
                  private var daub1: StartOneClass;
                  private var daub2: StartTwoClass;
                  private var i: Number = 10;
                  public function main(){
                            daub1 = new StartOneClass(i, stage)  // начальное значение i =10
                            daub2 = new StartTwoClass(i, stage)  // начальное значение i =10
                  }
       }
}
а дальше в каждом классе StartOneClass и StartTwoClass написать
Код AS3:
package {
         public class StartDaubClass {
               private var i: Number;
               private var stage:*;
               public function StartDaubClass (_i, _stage){
                      i = _i;
                      stage = _stage;                                           
               }
        }
}
ну это если будет ругаться, хотя можно и с this к примеру - но я предпочитаю так

код не проверял

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

Регистрация: Feb 2015
Сообщений: 63
Сделал по схеме, не ругается, все работает, из класса main значение =0 передает в функцию StartOneClass и StartTwoClass, в StartOneClass меняю значение на 10, в классе StartTwoClass делаю trace значения в отслеживателе события. Получается 0, 0 , 0 , .... То есть не срабатывает.

Старый 10.03.2015, 02:45
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 8  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
хм, действительно, ссылки на классы передаются, а вот на переменные создаёт новые экземпляры - думал, что сходно действие, ну тогда как вариант
Код AS3:
package {
         public class StartOneClass{
               public var i: Number;
               private var stage:*;
               public function StartOneClass(_i, _stage){
                      i = _i;
                      stage = _stage;                                           
               }
        }
}
дальше в основном классе
Код AS3:
package {
         import StartClass.StartOneClass;
         import StartClass.StartTwoClass;
         public class main {
                  private var daub1: StartOneClass;
                  private var daub2: StartTwoClass;
                  private var i: Number = 10;
                  public function main(){
                            daub1 = new StartOneClass(i, stage);  // начальное значение i =10
                            daub2 = new StartTwoClass(i, stage);  // начальное значение i =10
                            stage.addEventListener(Event.ENTER_FRAME, functionControl);
                  }
                  private function functionControl (e: Event): void{
                         if (StartOneClass.i != i){
                                   //вызывает public(создать ее) функцию из StartTwoClass(или ещё какой/их), в которой написано что делать, коль изменена i
                                   //ну и аналогичная проверка для иных классов
       }
}
код не проверял
это на скорую руку как вариант, что бы я написал, мож что получше подскажут

Добавлено через 12 минут
это как самый простой и очевидный, если классов много, проще в массив запихнуть, можно вообще сделать, как именно я бы сделал по уму (моему ) но это уже потребует проверки в работе

Старый 10.03.2015, 03:05
Фомич вне форума Посмотреть профиль Отправить личное сообщение для Фомич Найти все сообщения от Фомич
  № 9  
Ответить с цитированием
Фомич

Регистрация: Feb 2015
Сообщений: 63
Цитата:
1119: Access of possibly undefined property i through a reference with static type Class.
Код AS3:
if (StartOneClass.i != StartTwoClass.i){...
Не хочет создавать и кроме того подозреваю, что таким способом можно передавать значения true/false а не числовые, если вообще выйдет.
samana предложил статические использовать переменные, что за способ?

Старый 10.03.2015, 03:21
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 10  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Проверил последний вариант - работает, думаю у вас ошибка
про статистический не могу ничего сказать, читал, понимаю, но ни разу не пригодился, так что писать от болды не стану

Добавлено через 1 минуту
вы написали public var i ?

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

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

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


 


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


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