Actionscript 3 从其他类访问变量而不使用静态或全局

Actionscript 3 从其他类访问变量而不使用静态或全局,actionscript-3,class,variables,Actionscript 3,Class,Variables,我试图从一个类到另一个类获取一个数组,但我不能使用静态或全局变量 在我的类Jeu.as中,我有3个数组(t_map1、t_map2和t_map3)代表我的游戏地图。t_map是一个数组,可以包含其中一个贴图和一个我可以更改它的位置。我想把地图使用(form t_map)带到我的角色(Perso.as),这样它就可以知道它可以走到哪里或者不走 问题是我不知道如何将t_map从Jeu.as带到Perso.as。。。我曾尝试使用静态变量(如其他答案所示),但它不起作用,因为映射必须更改 如何在我的pe

我试图从一个类到另一个类获取一个数组,但我不能使用静态或全局变量

在我的类Jeu.as中,我有3个数组(t_map1、t_map2和t_map3)代表我的游戏地图。t_map是一个数组,可以包含其中一个贴图和一个我可以更改它的位置。我想把地图使用(form t_map)带到我的角色(Perso.as),这样它就可以知道它可以走到哪里或者不走

问题是我不知道如何将t_mapJeu.as带到Perso.as。。。我曾尝试使用静态变量(如其他答案所示),但它不起作用,因为映射必须更改

如何在我的perso.as类中创建包含数组的变量


简而言之,我想将我的jeu.as中的t\u map值带到perso中的另一个变量。as

听起来您需要一些简单的访问器

Jeu
中,您将需要以下内容来检索地图:

function getMap(mapNumber:int):Array
{
    switch(mapNumber)
    {
        case 1:
            return t_map1;
        case 2:
            return t_map2;
        case 3:
            return t_map3;
        default:
            trace("Error: that's not a valid map number!")
    }
}
package control {
   public class MainGame {
      protected var jeau:Jeau;
      protected function perso:Perso;
      public function MainGame() {
         jeau = new Jeau();
         //jeau setup
         perso = new Perso();
         perso.jeau = jeau;
      }
   }

}
如果您将地图保存在另一个包含
数组的数组中(我们称之为
所有地图
),该函数看起来会更好:

function getMap(mapNumber:int):Array
{
    allTheMaps[mapNumber];
}
然后,在
Perso
中,您需要存储一个数组的引用(如果需要同时了解多个贴图,则需要存储多个引用)以存储贴图。您还需要一个函数来设置数据:

var theMap:Array;

function setMap(theMap:Array):void
{
    myMap = theMap;
}
现在,您可以将映射从
Jeu
的实例传递到
Perso
的实例:

var Jeu = new Jeu();
var Perso = new Perso();
...
Perso.setMap(Jeu.getMap(1));

您真正需要做的就是给这两个实例一个对相同数组的引用,或者给Perso一个对Jeau的引用。静态变量是一个复杂的变量,即使在这种情况下没有任何固有的东西会阻止它们为您工作

下面是使用的解决方案的外观:

package model {
   public class Jeau extends EventDispatcher {

      protected var _tMap1:Array = new Array();
      protected var _tMap2:Array = new Array();
      protected var _tMap3:Array = new Array();
      //consider using more descriptive variable names
      //or an array of arrays (one map in each index)
      public function get tMap1():Array {
         return _tMap1;
      }
      public function set tMap1(value:Array):void {
         if (value != _tMap1) {
            _tMap1 = value;
            dispatchEvent(new Event('tMap1Changed'));
         }
      }
      public function get tMap2():Array {
         return _tMap2;
      }
      public function set tMap2(value:Array):void {
         if (value != _tMap2) {
            _tMap2 = value;
            dispatchEvent(new Event('tMap2Changed'));
         }
      }
      public function get tMap3():Array {
         return _tMap3;
      }
      public function set tMap3(value:Array):void {
         if (value != _tMap3) {
            _tMap3 = value;
            dispatchEvent(new Event('tMap3Changed'));
         }
      }
      protected function somethingThatChangesMap1(index:int, value:String):void {
         _tMap1[index] = value;
         dispatchEvent(new Event('tMap1Changed'));
      }
   }
}
我假设这是一个视图类——您没有给出很多细节。您将侦听来自模型类的事件,然后根据这些数组中的内容更新视图。通过获取整个实例,您可以监听这些事件。否则,您必须使用一些其他机制来传达更改(例如RobotLegs中使用的事件总线)

这只是一个如何使用第三个类来组合前两个类的示例。我不一定会这样做:

function getMap(mapNumber:int):Array
{
    switch(mapNumber)
    {
        case 1:
            return t_map1;
        case 2:
            return t_map2;
        case 3:
            return t_map3;
        default:
            trace("Error: that's not a valid map number!")
    }
}
package control {
   public class MainGame {
      protected var jeau:Jeau;
      protected function perso:Perso;
      public function MainGame() {
         jeau = new Jeau();
         //jeau setup
         perso = new Perso();
         perso.jeau = jeau;
      }
   }

}

很难理解问题的语言。如果你能集中精力澄清你的问题,那将大有帮助。当您实例化Perso.as时,传入对您的Jeu.as类的引用。(对不起,我的英语不好…)简言之,我想将我的Jeu.as中的t_映射值带到Perso.as中的另一个变量。是否某些静态变量无法工作?即使
t\u map1
发生变化,访问
Jeu.t\u map1[0]
(例如)也会给出当前值。我已经尝试过了,但我的程序停止工作了。。。出现错误是因为我试图使用静态变量。。。