I’ve been having a problem with passing variables between classes.
I have one class called GlobeView.as
Within that is a function designed to add markers to a globe
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 );
}
This function creates a new instance of a class called Marker. Within Marker.as there is a function that among other things defines the colour of the markers
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 );
}
What I’m trying to do is define a variable in GlobeView.as
e.g. var markerColor:String;
When a marker is added, give the variable a value
e.g.
{
var marker:Marker = new Marker();
marker.name = name;
markerColor = "red";
placeMarker( marker, latitude, longitude );
}
Then add an if statement to the marker class
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 );
}
I hope that makes sense – probably made it a lot more complicated than it needs to be
Why not pass those variables in the constructor for example?
By default it would have the color-string set to “blue”. The code does seem that it could use some refactoring though. For example, pass the color-parameter directly (e.g. use a uint and use that variable in the constructor of the ColorMaterial):
Or better yet, have pre-defined material-lists and pass one of those.