Hi,

You are creating your sprites inside your nav function as local variables - they are probably getting garbage collected because as soon as nav returns nsprite will cease to exist in your code and will be "reaped" by the gc at any time the Flash Player chooses after that.

I recommend you do something like the following which means your nav function returns the Sprite you create and you store it, meaning it won't get garbage collected.

   HTH

   Glen

//create an array of nname, nurl, strings (shortened for convenience.:
var nNames:Array = ["Home", "Bathroom", ...];
var nUrls:Array = ["index", "Bathroom", ....];
var positions:Array [


//loop through the arrays and create each navigation element, then return it...
var numLinks = nNames.length();

var nNavs:Array = new Array();
for(var i:int = 0; i < numLinks;i++) {
   var nav:Sprite = nav(nNames[i], nUrls[i], positions[i], 0x0e778a);
   nNavs.push(nav);
   //do anything else you need to do to the nav sprite here.
}

//make nav return the sprite it creates.
function nav(...):Sprite {
   //create stuff
   //...
   //Create mynav text field with a name attribute!
   mynav.name = "mynav";
   //add listeners
   //....
   return nsprite;
}

function onRolloverHandler(e:MouseEvent):void {
   var nsprite:Sprite = e.currentTarget as Sprite;
   if(nsprite && nsprite.mynav) {
      TextField(mysprite.mynav).bgcolor = 0x97f9ec;
   }
}

//Repeat for the other listener handlers.



John Singleton wrote:
Here's the complete code. Again, all this works fine in my swf in Flash, but when I upload the swf it breaks when I roll over "Home". The color changes and won't change back when I roll out. No other nav widget works at all.
function nav(nname:String, nurl:String, myX:int, bgcolor:uint):void
        {
            myfont2 = 'Arial';
            mydize = 15;
            mytxtcolor = 0x000000;
            myborder = true;
            mybordercolor = 0xFFFFFF;
            myY = 170;
            myfill = 0x97f9ec;
            mynav = new TextField();
            var format:TextFormat = new TextFormat();
            format.font = myfont2;
            format.size = mysize;
            mynav.htmlText = '<a href="' + nurl + '.html">' + nname + '</a>';
            mynav.textColor = myTextColor;
            mynav.border = myborder;
            mynav.borderColor = mybordercolor;
            mynav.background=true;
            mynav.backgroundColor = bgcolor;
            mynav.autoSize = TextFieldAutoSize.LEFT;
            mynav.x = myX;
            mynav.y = myY;
            mynav.setTextFormat(format);
            var navdrop:DropShadowFilter = new DropShadowFilter();
            navdrop.color = 0x000000;
            navdrop.blurX = 3;
            navdrop.blurY = 3;
            navdrop.angle = 0;
            navdrop.alpha = 0.5;
            navdrop.distance = 3;
            var navfilters:Array = new Array(navdrop);
            mynav.filters = navFiltersArray;
            var nsprite:Sprite = new Sprite();
            addChild(nsprite);
            nsprite.name = nname;
            nsprite.addChild(mynav);
            var len:int = mynav.numLines;
for (var i:int = 0; i < len; i++) {
                var metrics:TextLineMetrics = mynav.getLineMetrics(i);
                with(nsprite.graphics)
                {
                    beginFill(myfill, 1);
                    drawRect(mynav.x, mynav.y, metrics.width + 4, 
metrics.height + metrics.descent + 1);
                    endFill();
                }
            }
            addChild(nsprite);
            nsprite.addEventListener(MouseEvent.ROLL_OVER, onRollOverHandler);
            nsprite.addEventListener(MouseEvent.ROLL_OUT, onRollOutHandler);
            nsprite.addEventListener(MouseEvent.CLICK, onClickHandler);
            nsprite.addEventListener(MouseEvent.MOUSE_DOWN, onPressHandler);
            nsprite.addEventListener(MouseEvent.MOUSE_UP, onReleaseHandler);
            nsprite.mouseChildren = false;
            nsprite.buttonMode = true;
        }
function onRollOverHandler(e:MouseEvent) { if (e.currentTarget.name == ' Home ') {
nav(' Home ', 'index', 235, 0x97f9ec);
} else if (e.currentTarget.name == ' Bathroom ') {
nav(' Bathroom ', 'Bathroom', 295, 0x97F9EC);
} else if (e.currentTarget.name == ' Bedroom ') {
nav(' Bedroom ', 'Bedroom', 415, 0x97F9EC);
} else if (e.currentTarget.name == ' Dining Room ') {
nav(' Dining Room ', 'Dining_Room', 485, 0x97F9EC);
} else if (e.currentTarget.name == ' Forms ') {
nav(' Forms ', 'Forms', 642, 0x97F9EC);
} else if (e.currentTarget.name == ' About Us ') {
nav(' About Us ', 'About_Us', 703, 0x97F9EC);
} else if (e.currentTarget.name == ' Contact Us ') {
nav(' Contact Us ', 'Contact_Us', 782, 0x97F9EC);
}
}

function onRollOutHandler(e:MouseEvent)
{
if (e.currentTarget.name == ' Home ') {
nav(' Home ', 'index', 235, 0x0e778a);
} else if (e.currentTarget.name == ' Bathroom ') {
nav(' Bathroom ', 'Bathroom', 295, );
} else if (e.currentTarget.name == ' Bedroom ') {
nav(' Bedroom ', 'Bedroom', 415, 0x0e778a);
} else if (e.currentTarget.name == ' Dining Room ') {
nav(' Dining Room ', 'Dining_Room', 485, 0x0e778a);
} else if (e.currentTarget.name == ' Forms ') {
nav(' Forms ', 'Forms', 642, 0x0e778a);
} else if (e.currentTarget.name == ' About Us ') {
nav(' About Us ', 'About_Us', 703, 0x0e778a);
} else if (e.currentTarget.name == ' Contact Us ') {
nav(' Contact Us ', 'Contact_Us', 782, 0x0e778a);
}
}

function onClickHandler(e:MouseEvent)
{
mynav.textColor = 0x000000;
mynav.borderColor = 0xFFFFFF;
}

function onPressHandler(e:MouseEvent)
{
if (e.currentTarget.name == ' Home ') {
nav(' Home ', 'index', 235, 0xffffff);
} else if (e.currentTarget.name == ' Bathroom ') {
nav(' Bathroom ', 'Bathroom', 295, 0xffffff);
} else if (e.currentTarget.name == ' Bedroom ') {
nav(' Bedroom ', 'Bedroom', 415, 0xffffff);
} else if (e.currentTarget.name == ' Dining Room ') {
nav(' Dining Room ', 'Dining_Room', 485, 0xffffff);
} else if (e.currentTarget.name == ' Forms ') {
nav(' Forms ', 'Forms', 642, 0xffffff);
} else if (e.currentTarget.name == ' About Us ') {
nav(' About Us ', 'About_Us', 703, 0xffffff);
} else if (e.currentTarget.name == ' Contact Us ') {
nav(' Contact Us ', 'Contact_Us', 782, 0xffffff);
}
}

function onReleaseHandler(e:MouseEvent)
{
if (e.currentTarget.name == ' Home ') {
nav(' Home ', 'index', 235, 0x0e778a);
} else if (e.currentTarget.name == ' Bathroom ') {
nav(' Bathroom ', 'Bathroom', 295, 0x0e778a);
} else if (e.currentTarget.name == ' Bedroom ') {
nav(' Bedroom ', 'Bedroom', 415, 0x0e778a);
} else if (e.currentTarget.name == ' Dining Room ') {
nav(' Dining Room ', 'Dining_Room', 485, 0x0e778a);
} else if (e.currentTarget.name == ' Forms ') {
nav(' Forms ', 'Forms', 642, 0x0e778a);
} else if (e.currentTarget.name == ' About Us ') {
nav(' About Us ', 'About_Us', 703, 0x0e778a);
} else if (e.currentTarget.name == ' Contact Us ') {
nav(' Contact Us ', 'Contact_Us', 782, 0x0e778a);
}
}

Thanks,
John


_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders


--

Glen Pike
01326 218440
www.glenpike.co.uk <http://www.glenpike.co.uk>

_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to