[Flash AS2]unLoadClip

Pagina: 1
Acties:

  • Niakmo
  • Registratie: Juni 2001
  • Laatst online: 10-02-2024
Ik heb een functie die een aantal plaatjes load uit een map en die ergens plaats. Nu wil ik graag alle plaatjes weghalen zodra er op een van de plaatjes geclicked word, alleen het plaatje waar op geclicked is moet blijven staan. Ik zat te denken een een listener die naar het aanroepen van een functie luisterd maar volgens mij is dit niet mogelijk. Hoe zou ik dit het best kunnen aanpakken?

Flash ActionScript:
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
function showPictures(amount:Number, size:Number, ring:Number):Void
    {
        for(i = 0; i < amount; i++)
            {
                tmp = _root.holder.createEmptyMovieClip(j+"n", j);
                tmp2 = tmp.createEmptyMovieClip(j+"clipholder", j);             
                
                var mclListener:Object = new Object();
                mclListener.onLoadInit = function(target_mc:MovieClip)
                {
                    target_mc._width = size;
                    target_mc._height = size;
                    target_mc.filters = [dropShadow];
                }
                var image_mcl:MovieClipLoader = new MovieClipLoader();
                image_mcl.addListener(mclListener);
                image_mcl.loadClip("pictures/"+j+".jpg", tmp2);
                trace("pictures/"+j+".jpg");
                
                j++;
                
                if(ring == 2)
                    {
                    tmp._x = klein[i][0];
                    tmp._y = klein[i][1];
                    }
                if(ring == 1)
                    {
                    tmp._x = middel[i][0];
                    tmp._y = middel[i][1];
                    }
                if(ring == 0)
                    {
                    tmp._x = groot[i][0];
                    tmp._y = groot[i][1];
                    trace("hier");
                    }
            }
    }

Verwijderd

Je kunt het met een eventListener doen. Het slimste is om een 'pictureManager' te maken die alles voor je regelt. Hij zorgt ervoor dat alle plaatjes worden ingeladen, maar ook stuurt hij de events uit. Dus wanneer een gebruiker op ene plaatje klikt, zegt dit plaatje aan de manager dat er op hem is geklikt. De manager stuurt een event uit waar alle plaatjes op reageren. Zonder events lukt het ook door alle plaatjes in een array op te slaan, wanneer wordt geklikt deze array door te lopen en per plaatje de functie aan te roepen.

PS.
Doe dit niet met unLoadClip, maar zet de plaatjes die verwijderd moeten worden buiten de stage ( _x = 5000 ). Zodoende hoef je ze later niet meer in te laden, maar kan je ze weer terughalen door ze hun oorspronkelijke x-positie te geven.

[ Voor 20% gewijzigd door Verwijderd op 17-12-2005 14:24 ]


  • Larixk
  • Registratie: Juli 2001
  • Laatst online: 22-06-2024

Larixk

met xk, ja

Verwijderd schreef op zaterdag 17 december 2005 @ 14:22:
Doe dit niet met unLoadClip, maar zet de plaatjes die verwijderd moeten worden buiten de stage ( _x = 5000 ). Zodoende hoef je ze later niet meer in te laden, maar kan je ze weer terughalen door ze hun oorspronkelijke x-positie te geven.
waarom dan niet met "_visible = false"?

larixk


  • Niakmo
  • Registratie: Juni 2001
  • Laatst online: 10-02-2024
er worden steeds weer nieuwe plaatjes ingeladen, dus als ik ze steeds buiten de stage zet en nieuwe maken komt het geheugen binnen no time vol te zitten.

is er een mogelijkheid om mclListener.onLoadInit te gebruiken maar dat de listener luisterd naar een functie dus dat hij in werking treed zodra ik bijv. de functie removePics() aanroep?


Flash ActionScript:
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
function showRing(amount:Number, size:Number, ring:Number):Void
    {
        for(i = 0; i < amount; i++)
            {
                var mclListener:Object = new Object();                      //create the listener
                var image_mcl:MovieClipLoader = new MovieClipLoader();      //create the MovieClipLoader
                
                var tmp = _root.holder.createEmptyMovieClip(j, j);          //create emptyClip
                var tmp2 = tmp.createEmptyMovieClip("clipholder", j);       //and the holder so we can add en onRelease function
                image_mcl.loadClip("pictures/"+j+".jpg", tmp2);
                image_mcl.addListener(mclListener);
                
                mclListener.onLoadInit = function(target_mc:MovieClip)
                {
                    target_mc._width = size;
                    target_mc._height = size;
                    target_mc.filters = [dropShadow];
                }
                
                tmp.k = j;
                tmp.onRelease = function()
                    {
                        for(i = 0; i < this.k; i++)
                            {
                                clips[i].onEnterFrame = function()
                                    {   
                                        trace(i);  
                                    }
                            }
                    }

                clips[j] = tmp;
                
                j++;
                
                if(ring == 2)
                    {
                    tmp._x = klein[i][0];
                    tmp._y = klein[i][1];
                    }
                if(ring == 1)
                    {
                    tmp._x = middel[i][0];
                    tmp._y = middel[i][1];
                    }
            }
    }



de trace i zou als ik op plaatje 5 click constant 0 1 2 3 en 4 moeten tracen maar hij traced alleen 5, als ik de trace voor de onEnterFrame fucntie zet traced hij wel 0 1 2 3 4 hoe los ik dit op?

[ Voor 68% gewijzigd door Niakmo op 17-12-2005 17:42 ]


  • LB Back
  • Registratie: November 2004
  • Laatst online: 14-03 23:22
In de release functie geen i maar een andere letter gebruiken?

  • Niakmo
  • Registratie: Juni 2001
  • Laatst online: 10-02-2024
het is allemaal opzich wel gelukt alleen met die listeners blijft het maar vaag. Ik heb het volgende stuk(je) code:

Flash ActionScript:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
function showPics()
    {
        j = 0;
        showRing(16,75,2);
        showRing(8,120,1);
    }

//Function to generate the pictures depending which ring to use: 1,2 and 3, 3 being the outer ring.
function showRing(amount:Number, size:Number, ring:Number):Void
    {
        for(i = 0; i < amount; i++)
            {
                var mclListener:Object = new Object();                      //create the listener       
                var image_mcl:MovieClipLoader = new MovieClipLoader();      //create the MovieClipLoader
                
                var tmp = _root.holder.createEmptyMovieClip(j, j);          //create emptyClip
                var tmp2 = tmp.createEmptyMovieClip("clipholder", j);       //and the holder so we can add en onRelease function
                
                image_mcl.loadClip("pictures/"+j+".jpg", tmp2);
                image_mcl.addListener(mclListener);
                
                mclListener.onLoadInit = function(target_mc:MovieClip)
                {
                    target_mc._width = size;
                    target_mc._height = size;
                    target_mc.filters = [dropShadow];
                }
                
                
                tmp.k = j;
                tmp.onRelease = function()
                    {
                        var mclListener2:Object = new Object();             
                        var image_mcl2:MovieClipLoader = new MovieClipLoader();
                        
                        tamp = this.duplicateMovieClip("middel", this.getNextHighestDepth(), this);
                        tamp2 = tamp.createEmptyMovieClip("clipholder", this.getNextHighestDepth())
                        image_mcl2.loadClip("pictures/"+this.k+".jpg",tamp2);
                        image_mcl2.addListener(mclListener2);
                        
                        tamp._x = 300;
                        tamp._y = 275;
                        
                        mclListener2.onLoadInit = function(target_mc:MovieClip)
                            {
                                target_mc._width = 150;
                                target_mc._height = 150;
                                target_mc.filters = [dropShadow];
                            }
                        
                        clips[this.k].onEnterFrame = function()
                        {
                            for(i=0; i<24;i++)
                                {
                                    if(clips[i]._alpha > 0)
                                        {

                                            clips[i]._alpha = clips[i]._alpha - 10;
                                        }
                                }
                            
                            if(clips[1]._alpha <= 0)
                                {
                                    for(i=0; i<24;i++)
                                        {
                                            removeMovieClip(clips[i]);
                                        }
                                    delete mclListener;
                                    delete mclListener2;
                                    delete image_mcl;
                                    delete image_mcl2;
                                    showPics();
                                }
                        }
                    }

                clips[j] = tmp;
                
                j++;
                
                if(ring == 2)
                    {
                    tmp._x = klein[i][0];
                    tmp._y = klein[i][1];
                    }
                if(ring == 1)
                    {
                    tmp._x = middel[i][0];
                    tmp._y = middel[i][1];
                    }
            }
    }



alles doet het goed, alleen zodra ik een plaatje click word hij zoals het hoord gedupliceerd en naar zijn plaats gebracht, alleen waneer dan weer een nieuwe rij plaatjes moet komen gaat deze weer weg.
Pagina: 1