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

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

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

Регистрация: Mar 2010
Сообщений: 25
Question Как сделать глобальные переменные между классами в AS3?

Вообщем возникла такая проблема. В игре есть несколько разных классов в разных AS файлах.
Допустим у меня в основном классе документа есть переменная score в которой храниться количество очков. А в классе бонусов есть функция которая при столкновении героя с бонусом дает к примеру ему +100 очков.
Возникает вопрос - как правильно мне из стороннего класса изменить значиние переменной в основном классе (скажем так глобальной переменной, так как она и в других классах будет меняться и использоваться для алгоритмов).
Я понимаю что можно сделать к примеру (root as MovieClip).score+=100, но мне кажется что это не правильное решение с точки зрения AS3. Ведь получается что я к переменной обращаюсь по сути не через классы и объекты, а через root - главную сцену мувика как я понимаю.

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

Старый 14.07.2010, 18:19
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 2  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 dedalx:
Что-то сделать из экземпляра одного класса в экземпляре другого класса можно разными способами. Свойствами, методами, событиями...
Кстати, конструкция
Код AS3:
(root as MovieClip).score+=100
вызовет ошибку, поскольку у экземпляров класса MovieClip нет свойства score.
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

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

Регистрация: Mar 2010
Сообщений: 25
Цитата:
Сообщение от Хемуль Посмотреть сообщение
2 dedalx:
Что-то сделать из экземпляра одного класса в экземпляре другого класса можно разными способами. Свойствами, методами, событиями...
Кстати, конструкция
Код AS3:
(root as MovieClip).score+=100
вызовет ошибку, поскольку у экземпляров класса MovieClip нет свойства score.
А практический пример? Я понимаю что могу сделать в главном клипе метод addScore какой добавляет переданное число очков. Вопрос в том как мне обратиться к этому методу класса главного документа из к примеру класса Bonus, то есть из другого класса? root.addScore(100)? Так это не сильно отличается от того что я показал код выше.
Сформулирую вопрос по другому - как называется объект основного класса документа чтобы я мог обращаться к его методам? Ведь как я понимаю он создается автоматически, какое у него имя? Или это и есть root?

А (root as MovieClip).score+=100 у меня прекрасно работает, также как и root.score+=100 если выбрать не "жесткую" компиляцию. Только это не верное решение.

Приведу пример: В делфи чтобы использовать функцию из другого класса мы просто подрубали нужный Unit к документу и спокойно юзали функции что есть в нем - к примеру просто GetSomething(3) без всяких адресаций к чему либо. Но если я импортирую основной класс документа в классе бонусов к примеру, я все равно не смогу манипулировать с переменными и функциями класса основного документа напрямую (как это можно в делфи). Как с этим быть во флеше?


Последний раз редактировалось dedalx; 14.07.2010 в 18:29.
Старый 14.07.2010, 18:22
Сайлас вне форума Посмотреть профиль Отправить личное сообщение для Сайлас Найти все сообщения от Сайлас
  № 4  
Ответить с цитированием
Сайлас

Регистрация: Mar 2008
Сообщений: 259
Не вызовет, потому что мувиклип динамичный класс.

P.S. Тем не менее я считаю, что это некорректно.

Старый 14.07.2010, 18:27
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
public static

Старый 14.07.2010, 18:31
dedalx вне форума Посмотреть профиль Отправить личное сообщение для dedalx Найти все сообщения от dedalx
  № 6  
Ответить с цитированием
dedalx

Регистрация: Mar 2010
Сообщений: 25
Подробнее пожалуйста, с примером под мой вопрос. Какой класс надо делать public static или метод и как откуда использовать?

Старый 14.07.2010, 18:32
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 7  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 dedalx:
Ну вот, взгляните:
http://greenethumb.com/article/11/gl...riables-in-as3
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Старый 14.07.2010, 18:39
dedalx вне форума Посмотреть профиль Отправить личное сообщение для dedalx Найти все сообщения от dedalx
  № 8  
Ответить с цитированием
dedalx

Регистрация: Mar 2010
Сообщений: 25
То есть в основном классе документа (engine.as к примеру я пишу):
public static var score:int;

в классе bonus я подрубаю сверху основной класс документа:
import game.engine;

и могу теперь в классе бонус просто образаться к переменной как engine.score? Так ?

А это нормально что у меня импортированы классы друг в друга, то есть в основном классе у меня import bonus, а в классе бонуса импорт основного import engine?

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Да, так, минусов такого обьявления не знаю (ну может компилятору придётся похуже, но замедления компиляции не замечал). Единственное что - доступ к статическим переменным почему-то медленнее, чем к нестатическими и потому конструкция, вроде той, что по ссылке выше (хотя она как по мне стрёмная весьма и я не так делал бы) может иметь смысл, т.к. можно сохранить у себя ссылку на что-то типа того обьекта vars. Но ни разу проблемы с производительностью не решались заменой статиков, так что это скорее для общего развития %)

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

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
Создайте класс содержащий статические переменные (методы, гетеры/сеттеры) и импортируйте его в те классы в которых нужен доступ к глобальному коду
Код AS3:
package {
  public class Global{
    public static var str:String = "";
    public static var arr:Object;
    public static registerVar(name:String, value:* = null):void{
      if(arr[name] != undefined){
        arr[name] = value;
      }
    }
  .............................
  }
}
Код AS3:
package {
  import Global;
  public class Class1 {
    public function Class1(){
      trace(Global.str);
    }
  }
}
Код AS3:
package {
  import Global;
  import Class1;
  public class Class2 {
    private var class1:Class1;
    public function Class2():void{
      Global.str = "test";
      class1 = new Class1(); // trace output:test
    }
  }
}
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов


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

Теги
AS3 , root , глобальные переменные

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

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


 


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


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