webForumDet fria alternativet

Kalla funktion från en funktion

Flashur Flash, Shockwave

7 svar · 389 visningar · startad av Andiee

Medlem sedan mars 2000167 inlägg
Frågan#1

Hej,

Försöker lära mig lite Actionscript, men jag tycks inte lösa ett problem som dykt upp.

function createClip(movieToLoad){
	count++;
	mc = "mc" + count;
	_root.createEmptyMovieClip(mc, count);
	_root.getCurrClip = eval("mc" + count);
	_root.getCurrClip._x = -50;
	_root.getCurrClip.loadMovie(movieToLoad);
	_root.getCurrClip.moveInClip();
}

Här skapar vi ett movieClip, ger det en position och laddar in en extern film i det movieClipet. När jag kör den här funktionen fungerar det fint, den skapar det tomma movieClipet, ger det rätt instancename, men den kör inte nästa funktion > moveInClip. Varför inte?

Det är inget fel på den andra funktionen, testar jag den på något existerande movieClip fungerar det utsökt. Kan det vara något fel på eval()?

Medlem sedan maj 2003750 inlägg
#2

Problemet är att filmen du laddar in inte hinner ladda. Så vitt jag vet så körs inte loadMovie skript förrens allt annat skript körts redan. Så du kan tidigast anropa funktionen i nästa bildruta.

Oftast brukar man i sådana här fall antingen lägga funktionsanropet i den inladdade filmens första bildruta eller något sådant. Eller så använder man sig av en sk. "extern preloader" som först kollar att filmen laddat in innan funktionen anopas.

/Mirandir

Medlem sedan mars 2000167 inlägg
#3

Jag förstår vad du menar, men det är ju det tomma movieClipet som kallas - alltså "mc1", "mc2", "mc3" o.s.v. Det borde väl inte göra någon skillnad?

Medlem sedan maj 2003750 inlägg
#4

Men om funktionen moveInClip() är definerad i det inladdade filmklippet så måste den ju laddas in först eftersom annars hittar flash inte igen den och helt enkelt skippar den.

/Mirandir

Medlem sedan mars 2000167 inlägg
#5

All AS är definerad i _root

MovieClip.prototype.moveInClip = function(){
	this.onEnterFrame = function(){
		var xPos = Math.round(this._x);
		var dist = 0 - xPos;
		var movement = dist/8;
		this._x += movement;
	}
}
Medlem sedan maj 2003750 inlägg
#6

Oki. Men jag ser att du tilldelar en dynamisk onEnterFrame hanterare och tyvärr så skrivs den över av filmklippet som laddas in.

Testa nåt sånt här:

function createClip(movieToLoad){
	var tmp = null;
	count++;
	mc = "mc" + count;
	_root.getCurrClip = _root.createEmptyMovieClip(mc, count);

	_root.getCurrClip._x = -50;
	_root.getCurrClip.loadMovie(movieToLoad);
	tmp = _root.createEmptyMovieClip(mc + "_Preloader", 10000 + count);
	tmp.targetClip = _root.getCurrClip;
	tmp.onEnterFrame = function()
	{
		var l = this.targetClip.getBytesLoaded();
		var t = this.targetClip.getBytesTotal();
		if(l == t && t > 4)
		{
			_root.getCurrClip.moveInClip();
			this.removeMovieClip();
		}
	}

}

/Mirandir

Medlem sedan mars 2000167 inlägg
#7

Tack för tålamodet och hjälpen. Du har inte lust och förklara lite snabbt vad du gjorde...?

Iaf. Tack.

Medlem sedan maj 2003750 inlägg
#8

Kommentarer till varje rad:

// definera variabeln tmp.
var tmp = null;

// ... kapat lite kod ........

// Skapar ett nytt filmklipp som jag skall använda för  att
// "preload:a" filmklippet med funktionen. variabeln "tmp" tilldelas 
// samtidigt en referens till filmklippet.
tmp = _root.createEmptyMovieClip(mc + "_Preloader", 10000 + count);

// Skapar en referens i preloader clipet som pekar på det filmklipp som den skall göra en preload på:  
tmp.targetClip = _root.getCurrClip;

// onEnterFrame är en händelse som "avfyras" före varje bildruta:
tmp.onEnterFrame = function()
{
		// Stoppa antalet laddade och totala bytes
		// för det filmklipp som vi gör preload på i
		// i variabelerna l och t.
		var l = this.targetClip.getBytesLoaded();
		var t = this.targetClip.getBytesTotal();
		
		// Kollar om filmklippet laddat klart.
		if(l == t && t > 4)
		{
			// Anropar metoden moveInClip.
			_root.getCurrClip.moveInClip();
			
			// ta bort denna preloader då den 
			// inte behövs längre.
			this.removeMovieClip();
		}
	}

}

/Mirandir

139 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)