如何在AS3类之间传递变量

时间:2011-03-02 15:21:07

标签: flash actionscript-3 class variables

我在类之间传递变量时遇到了问题。

我有一个名为GlobeView.as的类

其中包含一个旨在向地球仪添加标记的功能

GlobeView.as -

public function addAdventureMarker( latitude:Number, longitude:Number, name:String=null ):void
    {
        var marker:Marker = new Marker();
        marker.name = name;
        placeMarker( marker, latitude, longitude );
    }

此函数创建一个名为Marker的类的新实例。在Marker.as中,有一个函数可以定义标记的颜色

Marker.as -

public function Marker()
    {
        super();

        var frontMaterial:ColorMaterial = new ColorMaterial( 0xff7200, 1, true );
        var backMaterial:ColorMaterial = new ColorMaterial( 0xff7200, 1, true );
        var leftMaterial:ColorMaterial = new ColorMaterial( 0xff6100, 1, true );
        var rightMaterial:ColorMaterial = new ColorMaterial( 0xff6100, 1, true );
        var topMaterial:ColorMaterial = new ColorMaterial( 0xff4f00, 1, true );
        var bottomMaterial:ColorMaterial = new ColorMaterial( 0xff4f00, 1, true );

        var materials:MaterialsList = new MaterialsList( { front:frontMaterial, back:backMaterial, left:leftMaterial, right:rightMaterial, top:topMaterial, bottom:bottomMaterial } );
        cube = new Cube( materials, width, depth, height );
        cube.addEventListener( InteractiveScene3DEvent.OBJECT_OVER, onCubeOver, false, 0, true );
        cube.addEventListener( InteractiveScene3DEvent.OBJECT_OUT, onCubeOut, false, 0, true );
        cube.addEventListener( InteractiveScene3DEvent.OBJECT_CLICK, onCubeClick, false, 0, true );
        cube.geometry.vertices[0].x -= 4;
        cube.geometry.vertices[0].y += 4;
        cube.geometry.vertices[1].x -= 4;
        cube.geometry.vertices[1].y -= 4;
        cube.geometry.vertices[2].x += 4;
        cube.geometry.vertices[2].y += 4;
        cube.geometry.vertices[3].x += 4;
        cube.geometry.vertices[3].y -= 4;
        addChild( cube );
        cube.moveBackward( depth / 2 );
    }

我要做的是在GlobeView.as中定义一个变量 例如var markerColor:String;

添加标记时,为变量赋值 e.g。

{
var marker:Marker = new Marker();
marker.name = name;
markerColor = "red";
placeMarker( marker, latitude, longitude );
}

然后将if语句添加到标记类

e.g。

public function Marker()
    {
        super();

        if (markerColor=="red")
        {
            var frontMaterial:ColorMaterial = new ColorMaterial( 0xff7200, 1, true );
            var backMaterial:ColorMaterial = new ColorMaterial( 0xff7200, 1, true );
            var leftMaterial:ColorMaterial = new ColorMaterial( 0xff6100, 1, true );
            var rightMaterial:ColorMaterial = new ColorMaterial( 0xff6100, 1, true );
            var topMaterial:ColorMaterial = new ColorMaterial( 0xff4f00, 1, true );
            var bottomMaterial:ColorMaterial = new ColorMaterial( 0xff4f00, 1, true );
        }

我希望这是有道理的 - 可能使它变得比它需要的要复杂得多

3 个答案:

答案 0 :(得分:1)

为什么不在构造函数中传递这些变量,例如?

public function Marker( name: String, color: String = "blue" )
{
    super();
    this.name = name;
    if (color == "red")
    {
         // ...
    }
}

默认情况下,将颜色字符串设置为“蓝色”。代码似乎确实可以使用一些重构。例如,直接传递color-parameter(例如,使用uint并在ColorMaterial的构造函数中使用该变量):

public function Marker( name: String, color: uint )
{
    var material: ColorMaterial = new ColorMaterial( color, ... );
    // ...
}

或者更好的是,有预先定义的材料清单并传递其中一个。

答案 1 :(得分:1)

这段代码更简单,也适用于我的。

在标记类中:

private var m_color:String;

public function markerColor(value:String):void {
        this.m_color = value;
}

在主要课程中:

var marker:Marker = new Marker();
marker.markerColor("red");

答案 2 :(得分:0)

您将“markerColor”定义为GlobeView类中的变量,并在Marker类中引用它。除非将它传递给Marker类,否则Marker类将不知道GlobeView.markerColor的值是什么。

在您的代码(下方)中,markerColor绝不与标记对象或标记类相关联。

{
  var marker:Marker = new Marker();
  marker.name = name;
  markerColor = "red";
  placeMarker( marker, latitude, longitude );
}

您可以在Marker类中添加“markerColor”属性/变量:

private var m_color:String
public function markerColor():String {
  return m_color;
}
public function set markerColor(value:String):void {
  this.m_color = value;
}

然后将您的代码更改为:

{
  var marker:Marker = new Marker();
  marker.name = name;
  marker.markerColor = "red";
  placeMarker( marker, latitude, longitude );
}