---
title: "Kalla funktion från en funktion"
type: "forum-thread"
url: "https://www.webforum.nu/amne/flash/117656-kalla-funktion-från-en-funktion"
topic: "Flash"
topic_url: "https://www.webforum.nu/amne/flash"
author: "Andiee"
published: "2004-12-09T09:16:05.000Z"
updated: "2004-12-09T19:49:39.000Z"
replies: 7
views: 409
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/flash/117656-kalla-funktion-från-en-funktion"
---

# Kalla funktion från en funktion

## #1 — Andiee, 2004-12-09T09:16Z

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()?

Permalänk: https://www.webforum.nu/p/117656

## #2 — mirandir, 2004-12-09T11:53Z

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

Permalänk: https://www.webforum.nu/p/1501763

## #3 — Andiee, 2004-12-09T12:09Z

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?

Permalänk: https://www.webforum.nu/p/1501772

## #4 — mirandir, 2004-12-09T12:31Z

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

Permalänk: https://www.webforum.nu/p/1501788

## #5 — Andiee, 2004-12-09T12:41Z

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;
	}
}
```

Permalänk: https://www.webforum.nu/p/1501792

## #6 — mirandir, 2004-12-09T14:08Z

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

Permalänk: https://www.webforum.nu/p/1501842

## #7 — Andiee, 2004-12-09T14:33Z

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

Iaf. Tack.

Permalänk: https://www.webforum.nu/p/1501873

## #8 — mirandir, 2004-12-09T19:49Z

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

Permalänk: https://www.webforum.nu/p/1502058

---

Tråden på webben: https://www.webforum.nu/amne/flash/117656-kalla-funktion-från-en-funktion
