[flash] OnPress functie op duplicerende MC

Pagina: 1
Acties:

  • E-jey
  • Registratie: Juni 2001
  • Niet online
Ik ben een flash schietspelletje aan het maken waarbij er steeds een monster movieclip voorbijkomt. De speler moet op deze monsters schieten. De monsters laat ik via actionscript random tweenen met LMCtween. Als de speler op deze monsters klikt (schiet) moeten ze verdwijnen, daarvoor gebruik ik unloadMovie().
Het probleem is dat ik de moviesclips dupliceer met duplicateMovieClip() en dat elk monster dus ik een eigen instance name heeft. Daardoor kan ik niet 1 functie maken voor alle monsters, ze hebben immers allemaal een andere naam. Om dit op te lossen heb ik de de functie in de loop gezet en maak ik dus voor elk gedupliceerde movieclip een functie. Niet netjes en het werkt ook niet :P

De code maakt het misschien iets duidelijker (php code gebruikt voor hightlight):

PHP:
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
// i word steeds opgehoogd zodat elke MC een eigen naam heeft. 
i = 0;
function createEnemy() {

        // genereren van eindlocatie monster tween
    randomSide = Math.round(Math.random()*3+0);
    switch (Number(randomSide)) {
        case Number(0) :
            x = Number(-150);
            y = Math.round(Math.random()*670+0);
            break;
        case Number(1) :
            x = Number(820);
            y = Math.round(Math.random()*670+0);
            break;
        case Number(2) :
            x = Math.round(Math.random()*820+0);
            y = Number(-150);
            break;
        case Number(3) :
            x = Math.round(Math.random()*820+0);
            y = Number(670);
            break;
    }
        
        // monster dupliceren
    _root.en_mc.duplicateMovieClip("en_mc"+i,_root.getNextHighestDepth());

    // functie per monster, dit werkt dus niet! 
       eval("this.en_mc"+i).en_btn.onPress = function() {
        eval("en_mc"+i).unloadMovie();
        stats.score_txt.text = Number(stats.score_txt.text)+1;
    };

    // tweenen met LMCtween
        eval("en_mc"+i).tween(["_xscale", "_yscale", "_x", "_y"],[100, 100, x, y],3,customEasing);

        // i ophogen
    i++;
}

// interval functie waardoor het eigenlijk een loop word. 
ID = setInterval(createEnemy, 500);


De code staat op een aparte action laag. Volgens mij is het probleem dat als ik op een monster klik er alweer een nieuwe monster is en dat de variabele i dus is opgehoogt. Vreemde is dat de functie wel altijd werkt en dat stats.score_txt.text altijd word opgehoogd. Ik heb al geprobeerd om een button te maken met daarin een movieclip, door die movieclip te dupliceren hoopte ik maar 1 functie nodig te hebben. Werkt alleen niet :/

Ik hoop dat ik een beetje duidelijk ben geweest en dat ieman de oplossing weet :) De vraag is dus hoe laat ik die monsters verdwijnen als ik er op klik.

FLA FILE

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Ik denk dat je Object-Orientated Programming moet gaan gebruiken. Dat is overzichtelijker en sneller (geen eval nodig iig :P)

Dit specifieke geval zou nog wel op te lossen zijn trouwens. Gewoon een functie op de stage zetten:

Flash ActionScript 3:
1
2
3
4
function enemyClickHandler (event:MouseEvent):void {
  var enemyMC = event.target;
  enemyMC.parentNode.removeChild(enemyMC);
}


...en die aan elke duplicate meegeven. Dit is trouwens AS3, ik ben vergeten hoe je de code schrijft in AS2 maar het komt op hetzelfde neer :P

TabCinema : NiftySplit


  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

Vervang
code:
1
2
3
4
 eval("this.en_mc"+i).en_btn.onPress = function() {
        eval("en_mc"+i).unloadMovie();
        stats.score_txt.text = Number(stats.score_txt.text)+1;
    };


eens door
code:
1
2
3
this["en_mc" + i].en_btn.onPress = function() {
 this.parent.unloadMovie();
}


In de onpressfunctie veranderd de scope naar en_btn, z'n parent is dus de MC die jij wil hebben. Bovendien is het gebruik van eval nogal 'not done'. (eval is het broertje van evil :P)

Raar... Is zo gek nog niet