2009-11-11 5 views
1

J'essaie de créer une boucle simple qui ajoute un nombre aléatoire d'étoiles, les supprime et les supprime.Ajouter/Tween/Supprimer - Plusieurs instances du même MC (Tweenlite)

Le script que j'ai trouvé fait tout sauf les supprimer, et peut-être que j'ai besoin de moins d'ajouter des enfants à une scène.

Voici ce que je viens avec

import flash.display.*; 
import com.greensock.*; 
import com.greensock.easing.*; 

// timer setup 
var timer:Timer=new Timer(randomNumber(500,1000)); 
timer.addEventListener(TimerEvent.TIMER,run_stars); 
timer.start(); 

// Random number generator 
function randomNumber(low:Number=NaN, high:Number=NaN):Number { 
    var low:Number = low; 
    var high:Number = high; 
    if(isNaN(low)) { throw new Error("no low number"); } 
    if(isNaN(high)) { throw new Error("no high number"); } 
    return Math.round(Math.random() * (high - low)) + low; 
} 

// randomly adding stars on timer 
function run_stars(event:TimerEvent):void { 
    // random num of stars 
    for (var i:Number=1; i<=randomNumber(2,7);i++) { 

      var star:m_star = new m_star(); 
      addChild(star); 

      // This is where my problem starts, I'm adding the same movie clip multiple times without any way to identify and remove. 


      star.x = randomNumber(0, stage.stageWidth); 
      star.y = randomNumber(0,stage.stageHeight/2); 

      TweenLite.to(star, randomNumber(0.5,1), {alpha:0.25, onComplete:removeStar()}); 

    } 

    timer.delay = randomNumber(500,1000); 
    timer.start(); 
} 

function removeStar() { 
    removeChild(star); 
    //this would be where I attempt to remove a star but because they aren't unique it will never work, and the star movie clip is called inside of the function so it cant even see it. 
    } 

stop(); 

je besoin d'un moyen de rendre les clips vidéo unique je peux dire ma fonction onComplete pour retirer le clip de la propriété, si je ne le fais pas ce film sera finalement ralentir et s'écraser à cause de tant de MovieClips (invisibles).

Merci!

Répondre

3

passer le MovieClip en tant que paramètre de la fonction onComplete:

TweenLite.to(star, randomNumber(0.5,1), { 
    alpha:0.25, 
    onComplete:removeStar, 
    onCompleteParams:[star] 
}); 

function removeStar(mc:MovieClip):void 
{ 
    if (contains(mc)) 
    { 
     removeChild(mc); 
    } 
} 
+2

c'est correct, sauf que vous n'avez pas besoin du() sur removeStar dans votre onComplete – Reuben

+0

Merci, reuben. Fixé. – typeoneerror

+0

Belle, très bien travaillé. La fonction envoie un nom de clip cette fois-ci, mais je ne comprends pas comment le script d'action peut-il différencier quelle étoile est référencée? – askon

1

Remarqué un bug ici:

for (var i:Number=1; i<=randomNumber(2,7);i++) { 

qui va faire appel à un nombre aléatoire entre 2 et 7 à chaque fois qu'il va à travers la boucle. Vous aurez un biais vers 1 ou 2 étoiles plutôt que 5 ou 6. (réduit de 1 à partir de la valeur de randomNumber passée parce que vous commencez votre index à 1 et non 0) J'imagine que vous ne voulez pas faire ça?

var len:int = randomNumber(2, 7); 
for (var i:int = 1; i <= len; i++) { 

est probablement plus proche de travailler comme vous l'aviez prévu.

Questions connexes