我在类之间传递变量时遇到了问题。
我有一个名为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 );
}
我希望这是有道理的 - 可能使它变得比它需要的要复杂得多
答案 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 );
}