2013-10-06 3 views
1

В Main.as я следующее:Совместное использование переменных в ООП AS3

package { 

    import flash.display.MovieClip; 

    public class Main extends MovieClip { 

     public var damage:Number; 

     public function Main() { 
      // constructor code 

      var char:Character = new Character(); 
      addChild(char); 
     } 
    } 
} 

И у меня есть еще один пакет под названием Character.as

package { 

    import flash.display.MovieClip; 

    public class Character extends MovieClip{ 

     public function Character() { 
      trace(damage); 
     } 
    } 
} 

мне нужно, чтобы быть в состоянии разделить множество повреждений в main.as с характером. Есть ли способ сделать скорость более глобальной?

ответ

2

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

char.damage = 100; 
trace (char.damage); 

Чтобы сделать это, просто добавьте свойство вашего персонажа класс так:

public class Character extends MovieClip { 

    public var damage:Number; 

    public function Character() { 
     trace(damage); 
    } 
} 

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

Если это так ... просто определить его как общественная статику в главном классе, как это:

public static var damage:Number; 

и получить к нему доступ в любом месте вы делаете это:

Main.damage = 100; 
trace(Main.damage); 
+0

Мне тоже нужно отредактировать его с помощью других классов – lededje

+1

Таким образом, ваш подход не очень ооо. Сделать его общедоступной статической переменной. – prototypical

+2

обновил мой ответ. Если вы хотите использовать ООП, вы должны сделать шаг назад и изучить некоторые основные концепции/шаблоны ООП. – prototypical

0

Существует еще один способ отправки значений через пакеты (этот способ не является обменом между собой, но он может быть вам полезен). Что делает этот код является то, что класс символов создает переменную, и эти переменные получает значение от основного пакета:

изменить character.as к этому:

package { 

import flash.display.MovieClip; 

public class Character extends MovieClip{ 

    public function Character(a:int) { 
     //output will be the integer 10 
       trace(a); 
    } 
} 
} 

и Main.as к:

package { 

import flash.display.MovieClip; 

public class Main extends MovieClip { 

    private var damage:int = 10; 

    private var char:Character = new Character(damage); 

    public function Main() { 

    } 
} 
} 
  • Edit: Не полезно для реального времени приложений, так как значения private var damage будут посылать только на инициализацию private var char:Character = new Character(damage).
+1

Это не сработает, поскольку вы создаете «новый» экземпляр основного класса в пределах своего класса символов, который я предполагаю, это его класс документа. – prototypical

+0

Вы были правы. Объявление частного var _main: Main = New Main() в пакете Charater не работает. Я обновил его сейчас. – Julian

+1

Ваш текущий код позволит ему передать значение урона конструктору при создании экземпляра 'Character'.Как насчет того, когда он хочет использовать урон ПОСЛЕ создания экземпляра? После завершения конструктора 'a' больше не существует, так как он является параметром и не сохраняется в свойстве в вашем конструкторе. Также имейте в виду, что примитивные типы передаются как значения, а не ссылки. Поэтому, даже если вы сохранили это значение в свойстве, если повреждение изменилось после создания экземпляра, экземпляр «Character» имел бы только начальное значение ущерба, которое было передано конструктору. – prototypical

Смежные вопросы