I have a flash site I'm building, the only problem I'm having is the carousel I have for it does not stay on the frame its supposed to be on.

I.E.

I click on the link to the carousel, and it pops up and works normally, however, if I click on another link to a different page in the site, the carousel remains on the stage, and if I click BACK on the link to the carousel, it continues to duplicate the carousel everytime the link is clicked on.

I'm thinking that an <if> statement used in the code to limit it to that frame<i.e.<if on frame X>>

Here is the code, if it helps

import mx.utils.Delegate;
import mx.transitions.Tween;
import mx.transitions.easing.*;

var numOfItems:Number;
//rad X/Y adjust for carousel size
var radiusX:Number = 300;
var radiusY:Number = 90;
var centerX:Number = Stage.width/2;
var centerY:Number = Stage.height/2;
var speed:Number = 0.01;
var perspective:Number = 130;
var home:MovieClip = this;
theText._alpha = 0;
var nodes;

var tooltip:MovieClip = this.attachMovie("tooltip","tooltip",10000);
tooltip._alpha = 0;

var xml:XML = new XML();
xml.ignoreWhite = true;

xml.onLoad = function()
{
    nodes = this.firstChild.childNodes;
	numOfItems = nodes.length;
	for(var i=0;i<numOfItems;i++)
	{
		var t = home.attachMovie("item","item"+i,i+1);
		t.angle = i * ((Math.PI*2)/numOfItems);
		t.onEnterFrame = mover;
		t.toolText = nodes[i].attributes.tooltip;
		t.content = nodes[i].attributes.content;
		t.icon.inner.loadMovie(nodes[i].attributes.image);
		t.ref.inner.loadMovie(nodes[i].attributes.image);
		t.icon.onRollOver = over;
		t.icon.onRollOut = out;
		t.icon.onRelease = released;
	}
}


function over()
{
	home.tooltip.tipText.text = this._parent.toolText;
	home.tooltip._x = this._parent._x;
	home.tooltip._y = this._parent._y - this._parent._height/8;
	home.tooltip.onEnterFrame = Delegate.create(this,movetip);
	home.tooltip._alpha = 100;
}

function out()
{
	delete home.tooltip.onEnterFrame;
	home.tooltip._alpha = 0;
}

function released()
{
	home.tooltip._alpha = 0;
	for(var i=0;i<numOfItems;i++)
	{
		var t:MovieClip = home["item"+i];
		t.xPos = t._x;
		t.yPos = t._y;
		t.theScale = t._xscale;
		delete t.icon.onRollOver;
		delete t.icon.onRollOut;
		delete t.icon.onRelease;
		delete t.onEnterFrame;
		if(t != this._parent)
		{
			var tw:Tween = new Tween(t,"_xscale",Strong.easeOut,t._xscale,0,1,true);
			var tw2:Tween = new Tween(t,"_yscale",Strong.easeOut,t._yscale,0,1,true);
			var tw3:Tween = new Tween(t,"_alpha",Strong.easeOut,100,0,1,true);
		}
		else
		{
			var tw:Tween = new Tween(t,"_xscale",Strong.easeOut,t._xscale,100,1,true);
			var tw2:Tween = new Tween(t,"_yscale",Strong.easeOut,t._yscale,100,1,true);
			//XY modify thumb position next to full size image
			var tw3:Tween = new Tween(t,"_x",Strong.easeOut,t._x,160,1,true);
			var tw4:Tween = new Tween(t,"_y",Strong.easeOut,t._y,450,1,true);
			var tw5:Tween = new Tween(theText,"_alpha",Strong.easeOut,0,100,1,true);
			trace(nodes[i].attributes.content);
			_root.theText.loadMovie(nodes[i].attributes.content);
			var s:Object = this;
			tw.onMotionStopped = function()
			{
				s.onRelease = unReleased
			}
		}
	}
}

function unReleased()
{
	delete this.onRelease;
	var tw:Tween = new Tween(theText,"_alpha",Strong.easeOut,100,0,.5,true);
	for(var i=0;i<numOfItems;i++)
	{
		var t:MovieClip = home["item"+i];
		if(t != this._parent)
		{
			var tw:Tween = new Tween(t,"_xscale",Strong.easeOut,0,t.theScale,1,true);
			var tw2:Tween = new Tween(t,"_yscale",Strong.easeOut,0,t.theScale,1,true);
			var tw3:Tween = new Tween(t,"_alpha",Strong.easeOut,0,100,1,true);
		}
		else
		{
			var tw:Tween = new Tween(t,"_xscale",Strong.easeOut,100,t.theScale,1,true);
			var tw2:Tween = new Tween(t,"_yscale",Strong.easeOut,100,t.theScale,1,true);
			var tw3:Tween = new Tween(t,"_x",Strong.easeOut,t._x,t.xPos,1,true);
			var tw4:Tween = new Tween(t,"_y",Strong.easeOut,t._y,t.yPos,1,true); 
			var s:Object = this;
			tw.onMotionStopped = function()
			{
				{
					for(var i=0;i<numOfItems;i++)
					{
						var t:MovieClip = home["item"+i];
						t.icon.onRollOver = Delegate.create(t.icon,over);
						t.icon.onRollOut = Delegate.create(t.icon,out);
						t.icon.onRelease = Delegate.create(t.icon,released);
						t.onEnterFrame = mover;
					}
				}
			}
		}
	}
}

function movetip()
{
	home.tooltip._x = this._parent._x;
	home.tooltip._y = this._parent._y - this._parent._height/8;
}

xml.load("icons.xml");

function mover()
{
	this._x = Math.cos(this.angle) * radiusX + centerX;
	this._y = Math.sin(this.angle) * radiusY + centerY;
	var s:Number = (this._y-perspective) / (centerY+radiusY-perspective);
	this._xscale = this._yscale = s * 100;
	this.angle += this._parent.speed;
	this.swapDepths(Math.round(this._xscale) + 100);
}

this.onMouseMove = function()
{
	//carousel speed modifier
	speed = (this._xmouse-centerX) / 6500;
}

Any help is greatly appreciated.

Recommended Answers

All 5 Replies

I am thinking that a code string something similar to

on(leaveFrame)
{
     delete functions
}

where <functions> is replaced with the various functions in the code, and repeated to delete all functions.

My biggest problem is that I just don't know actionscript really at all, so having a really hard time trying to figure this out, and the proper structure for the code.

Member Avatar for rajarajan2017

Hey man, I tried yesterday your file for a long time, and I did not get you what you are coming to say? There is no back button in your fla file. I tried to download your file from your previous post but you uploaded the file that I sent you last. So exactly point out the issue and attach your source as you did before.


Now the file is working as below:
1. when you click the thumbnail it popups the large image
2. The thumbnail is automatically get the left position and large image in the right position
3. when you click the left image again it returns to caurosel and working fine.

Then whats the problem, where you have the back button, and when it creating the duplicates?

http://www.atomicplum.com/Students/Ben/Flash/Ben%20Flash%20Site.zip


Thats the new file, the carousel, is working properly and its there on frame 140. Overall, everything on the site works like its supposed to, its just the problem with the carousel won't stop when leaving that frame, and if you go BACK to it, the carousel duplicates itself. One duplicate for EVERY time you go back to that frame in the .swf<<i.e. if you click on the graphics link 10 times, you'll have 10 copies of the carousel running at the same time; potentially you could do it enough to crash a computer!!>>.

Member Avatar for rajarajan2017

Follow the instructions carefully:

  1. Take backup of your original Deathbydesign.fla file
  2. Open Deathbydesign.fla (not the attached file, the original file you have in your system)
  3. Go to image layer > select the keyframe at 141 > press delete (confirm that you have a empty keyframe now)
  4. Delete the Carousel layer (Dont worry about the code, just delete the layer)
  5. Open the attached file solution.fla
  6. Click on the blue movieclip to select and copy from the edit menu
  7. Goto your Deathbydesign.fla file and select the empty keyframe on image layer
  8. Goto Edit > Paste in Place

I have executed and its working fine.

Note: When you paste, sometimes overwrite msg will come. overwrite it.

Thats it! Enjoy!

I had no that much of speed to attach the file, thats why I created a simple file and asking you to do this.
If you struggle, come again. I am here to help you. But please convert your file to flash 8 so that I will give you
the solution soon, bcoz only in home I have flash cs4.

Hope this solve!

commented: Very Knowledgeable, and friendly, great responses!! +1

Your a life saver, thank you so much. Now I think I'm going to go learn AS properly before I go off trying to do any of this again.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.