1

ランダムな数の星を追加し、フェードアウトして削除する単純なループを作成しようとしています。

私が思いついたスクリプトは、それらを削除する以外はすべて実行します。おそらく、ステージに子供を追加する必要はありません。

これが私が思いついたものです

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

プロパティ クリップを削除するように oncomplete 関数に指示できるように、ムービー クリップを一意にする方法が必要です。これを行わないと、非常に多くの (目に見えない) ムービー クリップが原因で、最終的にムービーの速度が低下し、クラッシュします。

ありがとう!

4

2 に答える 2

3

onComplete 関数のパラメーターとして MovieClip を渡します。

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

function removeStar(mc:MovieClip):void
{
    if (contains(mc))
    {
        removeChild(mc);
    }
}
于 2009-11-11T22:10:17.337 に答える
1

ここでバグに気づきました:

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

これは、ループを通過するたびに 2 から 7 までの乱数を呼び出します。5 つまたは 6 つではなく、1 つまたは 2 つの星に向かって偏りがあります。

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

意図したとおりに機能する可能性が高くなります。

于 2009-12-04T05:49:06.123 に答える