Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[Actionscript 3.0] Return waarde ipv Array

Pagina: 1
Acties:

  • Hot Pixel
  • Registratie: Oktober 2005
  • Laatst online: 12-10 15:22

Hot Pixel

King of no pants

Topicstarter
Hey luitjes. Ben bezig met een flink project. Ben mijn eerste stappen aan het zetten in OOP, en stuit nu op wat problemen. Normaal helpt google mij altijd uit de brand, maar helaas.
Ik heb dus een Preloader class geschreven, en hij doet niet helemaal wat ik wil.
Soms wil ik een bepaalde functie uitvoeren als hij klaar is met laden. Dat doe ik op de volgende manier:

Flash ActionScript:
1
2
3
4
5
6
PreLoader.start("/images/plaatje.jpg", mySprite, { onComplete: myFunction, onCompleteParams: [myValue1, myValue2] })

public function myFunction(myValue1:Object, myValue2:Number)
{
  myValue1.x = myValue2;
}


in mijn preloaderClass komt hij als'n array binnen, maar hij gaat er ook weer als een array uit! Dus dat is 1 object in plaats van 2 waardes!
Hoe kan ik 'n array 'breken' zodat hij twee waardes verstuurd?

Hoop dat ik het zo een beetje duidelijk heb uitgelegd.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

AS lijkt op javascript. Kun je niet zoiets doen?:
JavaScript:
1
2
3
4
5
6
7
8
PreLoader.start("/images/plaatje.jpg", mySprite, { 
   onComplete: function() { myFunction(myValue1, myValue2); }
});

public function myFunction(myValue1:Object, myValue2:Number)
{
  myValue1.x = myValue2;
}

日本!🎌


  • Hot Pixel
  • Registratie: Oktober 2005
  • Laatst online: 12-10 15:22

Hot Pixel

King of no pants

Topicstarter
merci beaucoup. Werkt in principe wel.
Het probleem is dat het preloaden in een for-loopje staat. Als waarde in de uit te voeren functie krijg ik alleen maar de laatste waarde van het loopje (e.g. als ik acht items heb, en ik wil het huidige nummer meesturen krijg ik alleen maar '8' terug. Als ik het object wat geladen is wil meesturen krijg ik alleen het laatst geladen object terug etc).
Bedankt voor de hulp in ieder geval, much appreciated!

  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
Het probleem is dat het preloaden in een for-loopje staat. Als waarde in de uit te voeren functie krijg ik alleen maar de laatste waarde van het loopje (e.g. als ik acht items heb, en ik wil het huidige nummer meesturen krijg ik alleen maar '8' terug. Als ik het object wat geladen is wil meesturen krijg ik alleen het laatst geladen object terug etc).
Dit lijkt me een closure probleempje. Als je die indirectie van functies net zo implementeert als Thanatos aangeeft (en als closures goed zijn geimplementeerd in ActionScript), zou je dit ook in een lus moeten kunnen doen.

Ook in javascript (misschien heb je er wat aan). Gaat vooral om die callLater functie:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript">
    // Loadable class (something we like to load)
    function Loadable(aName)
    {
        this.name = aName;
    }

    function PreLoader(aLoadFunction)
    {
        this.loadables = [];
        this.loadFunction = aLoadFunction;
        
        this.addLoadable = function(aLoadable)
        {
            this.loadables.push(aLoadable);
        }

        function callLater(loader, loadable)
        {
            return function() { loader.loadFunction(loadable); };
        }
        
        this.load = function()
        {
            for (var i = this.loadables.length-1; i>=0; i--)
            {
                // async loading emulation
                setTimeout(callLater(this, this.loadables[i]), Math.random() * 10000);
            }
        }
    }
    
    function onLoaded(aLoadable)
    {
        var txt = document.createTextNode(aLoadable.name + ' is ready!');
        var li = document.createElement('li');
        li.appendChild(txt);
        var ul = document.getElementById('myUL');
        ul.appendChild(li);
    }
    
    var preLoader = new PreLoader(onLoaded);
    for (var i=0; i<5; i++)
    {
        var newLoadable = new Loadable('Loadable' + i);
        preLoader.addLoadable(newLoadable);
    }
    
    preLoader.load();
</script>
</head>
<body>
    En de objecten zijn:
    <ul id="myUL"></ul>
</body>
</html>

Verwijderd

Hot Pixel schreef op donderdag 10 juli 2008 @ 14:35:
Hey luitjes. Ben bezig met een flink project. Ben mijn eerste stappen aan het zetten in OOP, en stuit nu op wat problemen. Normaal helpt google mij altijd uit de brand, maar helaas.
Ik heb dus een Preloader class geschreven, en hij doet niet helemaal wat ik wil.
Soms wil ik een bepaalde functie uitvoeren als hij klaar is met laden. Dat doe ik op de volgende manier:

Flash ActionScript:
1
2
3
4
5
6
PreLoader.start("/images/plaatje.jpg", mySprite, { onComplete: myFunction, onCompleteParams: [myValue1, myValue2] })

public function myFunction(myValue1:Object, myValue2:Number)
{
  myValue1.x = myValue2;
}


in mijn preloaderClass komt hij als'n array binnen, maar hij gaat er ook weer als een array uit! Dus dat is 1 object in plaats van 2 waardes!
Hoe kan ik 'n array 'breken' zodat hij twee waardes verstuurd?

Hoop dat ik het zo een beetje duidelijk heb uitgelegd.
BulkLoader is een hele mooie library waar alles al heel mooi word gedaan qua loaden / preloaden.
http://code.google.com/p/bulk-loader/

Scheelt misschien veel werk.