0

私は AS3 と Flash に非常に慣れていないので、誰かがこのテストピースを見ることができるかどうか疑問に思っています。

Flash ファイル内には、ボタンが押されたときにステージにランダムかつ動的に追加される多数のムービークリップがあります。すべてのムービークリップは同じ幅ですが高さが異なり、すべてのムービークリップの登録点は左下に配置されています (この段階ではテスト目的でのみボタンを使用しています)。

私がやりたいことは、(ボタンを使用するのではなく)「自動的に」(ボタンを使用するのではなく)ライブラリからランダムに選択された mc の無限のストリームをステージに追加することです(つまり、mc は連続して追加する必要があります。ステージの上部から下部に向かって垂直方向に下向きに自動スクロールし (終わりのないベルトコンベアのように)、ステージ上で見えなくなるとライブラリに戻されます。

誰でもアイデアはあります。

//mc's are dynamically loaded & returned to the library
//mc's have 'export for Actionscript' property
//mc's have their anchor point placed bottom left

//stop all
stop();

//Speed of the vertical auto-scroll movement
var scrollSpeed:uint = 1;

//auto load random mc from library & place top left corner of stage

//load random mc via button for test purposes
McButton.addEventListener(MouseEvent.CLICK,attachMovieclip);
function attachMovieclip(event:MouseEvent):void{

//create a random number for choosing a mc from the array
var newNumber:int = (Math.random ()*14)

//define the mc's
var mc1:Red01 = new Red01();
var mc2:Red02 = new Red02();
var mc3:Red03 = new Red03();
var mc4:Orange01 = new Orange01();
var mc5:Orange02 = new Orange02();
var mc6:Orange03 = new Orange03();
var mc7:Yellow01 = new Yellow01();
var mc8:Yellow02 = new Yellow02();
var mc9:Green01 = new Green01();
var mc10:Green02 = new Green02();
var mc11:Blue01 = new Blue01();
var mc12:Blue02 = new Blue02();
var mc13:Purple01 = new Purple01();
var mc14:Purple02 = new Purple02();

//create an array which holds all the mc's
var Mcarray:Array = newArray(mc1,mc2,mc3,mc4,mc5,mc6,mc7,mc8,mc9,mc10,mc11,mc12,mc13,mc14);

//add child (or random mc) to the stage
addChild(Mcarray[newNumber]);

//place mc at specific starting point coordinate - i.e. top of the stage
Mcarray[newNumber].x=0
Mcarray[newNumber].y=0

//trace mc random numeric value for test purposes
trace(newNumber);

//auto-scroll the randomly chosen mc vertically down the stage
stage.addEventListener(Event.ENTER_FRAME, moveScroll);
function moveScroll(e:Event):void{
Mcarray[newNumber].y += scrollSpeed;

//once first mc is completley on stage load the next random mc

//once a mc has completely left the bottom of the stage return it to the library
}
}
4

2 に答える 2

0

頭のてっぺんから外れているので、少し荒いかもしれませんが....

最初のクリップから始めて、「onscreenClips」配列に保存します (キューのように使用されます)。

1.) 「onscreenClips」の開始クリップを y = -height に設定します。これにより、クリップの下部がステージの上部に揃えられます。

次に、Enter Frame ループ内で次のようにします。

1.) 「onscreenClips」内のクリップを速度だけ下に移動します

2.) 「onscreenClips」の最初のオブジェクトが一番下に達しているかどうかを確認します (y プロパティはステージの高さに等しくなります)。その場合は、表示から削除し (現在は画面外になっているため)、キューから外します。最初のオブジェクトは、常にキュー内の「最も古い」オブジェクトです。

3.) 「onscreenClips」の最後のオブジェクトがまだステージの一番上に達しているかどうかを確認します (y プロパティが 0 に達し、負ではなくなりました)。これは、上端がステージの上部と一致することを意味します。これ以上下に移動すると、ギャップが生じます。これが発生した場合は、y = -height に設定された次のクリップを追加してから、キューにプッシュします。

4.) 追加するオブジェクトがなくなるまで続行します。次に、「onscreenClips」配列/キューが空になるまで、ステップ 2 の状態をチェックし続けます。

于 2013-05-02T06:05:14.890 に答える
0

これでもう少し先に進むことができました。

MC の全高が表示されて「ステージ上」にあるとき、および MC の全高が非表示で「ステージ外」にあるとき、および両方が正しく機能していることを判断するためのチェックを追加しました。

また、remove child ステートメントを追加しました。これにより、MC が見えなくなり、オフステージになったときにステージから削除され、ライブラリに戻されます。これは視覚的に機能します (つまり、MC はステージから消えます) が、出力結果によると、MC は (目に見えませんが) まだ存在しているように見え、目に見えるステージの制限を超えて移動しています。

于 2013-05-04T03:58:07.510 に答える