? asked in 電腦與網際網路程式設計 · 1 decade ago

FLASH 修改成陣列寫法

function Crazy() {

var step = 5;

var RPG = arguments.length;

for (var i = 0; i<RPG; i++) {

this = eval(arguments[i]);

this.onEnterFrame = function() {

this._alpha -= 5;

if (Math.floor(this._alpha)<=0) {

delete onEnterFrame;

this.unloadMovie;

}

}

}

}

有人可以幫忙修改成new Array陣列的寫法嗎

因為arguments這東西雖說是自訂陣列長度,還是搞不懂..

主要他是個卸 載影片的程式碼

還有一個地方不懂的是 我知道eval是this[mc+i]

可是就是不清楚 他是如何影片進行迴圈洩載

(就是不太會迴圈存取元素)

===========

希望能有人可以詳細說到我懂

告訴我這腦袋裝水泥的人= =

Update:

那請問一下 像我把這改成

var RPG = test.length;

this = eval(test[i]);

為何就不會跑了???

一定要裝陣列元素的原因是什麼@@?

那意思就是說

arguments[0]~[9]

所對應的是裝什麼?? = ="

=========================

Update 2:

承上部分 再問就是說

我知道在這onEnterFrame扮演遞減alpha

那麼在此arguments扮演裝什麼??

迴圈出來那些容器是做什麼用?

一開始疑問備註,在這裡arguments是關鍵字名稱,有作用無法替代?

Update 3:

我似乎有點撥雲見日的感覺...

麻煩最後糾正我的觀念一下是否正確

如果沒錯的話 那我應該是懂了

在此先感激你的熱情教導

=========================

所以我有arguments[0]-[9]的容器

而我把這個遞減透明度的效果裝在[0]容器裡面

檔案大或者像J大所說以後要裝東西 還可以裝在[1]~[9]裡面?

↑以上應該沒有說錯的地方吧@@?

Update 4:

不好意思 J大 我造你的方式去改了之後

卻造成無法卸載

var test = new Array()

var RPG = test.length;

原因為何@@?

1 Answer

Rating
  • 1 decade ago
    Favorite Answer

    "修改成new Array陣列"?? 我不是很懂這句話的意思

    arguments也不是你說的"自定陣列長度"

    arguments只是個陣列的名稱, 後面加上.length是去找出arguments的長度(資料量), 而var RPG = arguments.length, 只是把arguments的長度變成用RPG來當變數名稱. 所以下面的for (var i = 0; i<RPG; i++)才會用RPG來當變數.

    配合你第一個問題, 修改成new Array? 是什麼意思.

    如果要照你的說法, 頂多只能重新宣告一個新的陣列.

    例如:

    var new = new Array();

    var RPG = new.length;

    for (var i = 0; i<RPG; i++){............};

    也只是這樣而已, 跟原本的並沒有差別阿.

    .................................................................................................................

    你的第2個問題 "eval"

    在說明之前, 你必須要先去了解"陣列"和"迴圈"的定義.

    在這我不加贅述, 網路上, 書上甚至是flash IDE裡都有說明.

    在這我只針對你上面的語法做說明.

    for (var i = 0; i<RPG; i++)

    這段是說宣告i從0開始一直到小於RPG(arguments的長度)這個變數結束. 也就是說, 如果arguments的長度等於10.

    也就是說, i的值會是從0,1,2,3,4~~~一直到9為止, 換句話說, 這個陣列就會執行10次.

    接下來用i去代入arguments(arguments[i])是要去找出arguments裡面相對存放位置的值(元件),

    例如arguments[0]就是去找出arguments中第一個值(元件)

    arguments[1]則為第2個, 以此類推.

    所以this = eval(arguments[i])這段就是要分別找出arguments裡的值(元件)並指定給this這個變數,

    如果配合著上面的迴圈, 則就會依照arguments裡有多少個值(元件)

    而找出多少個相對應的值(元件).

    再用下面這段語法

    this.onEnterFrame = function() {

    this._alpha -= 5;

    if (Math.floor(this._alpha)<=0) {

    delete onEnterFrame;

    this.unloadMovie;

    把所找出元件的透明度以5遞減,

    直到如果該元件的透明度<=0的時候就delete該元件, 並停止onEnterFrame.

    .................................................................................................................

    這是個很簡單也很基本的陣列和迴圈的配合用法.

    其實書上, 或是flash裡的說明就已經有cover到了.

    建議你還是要先去把陣列和迴圈的基本定義弄清楚.

    2008-02-01 18:47:33 補充:

    var RPG = test.length;

    也就是說RPG是陣列test的長度.

    可是, 你並沒有宣告test(var test = new Array())

    這個陣列阿, 所以哪來的長度呢?

    沒有陣列你就沒辦法把資料存到flash內建的儲存功能裡.

    今天假設你場景上只有2個元件, 你可以"手動"的去做控制,

    但是如果原件一多呢? 或是元件是動態產生的呢?

    難道你還要一個一個去控制嗎?

    陣列的用途就是把那些元件集合起來一起做控制.

    2008-02-01 18:51:53 補充:

    arguments[0]~[9]裝的是什麼:

    我不知道你上面的程式裡的arguments所存的東西是什麼.

    上面的程式裡, 你並沒有貼出來, 也就是說貼出來的程式不完整.

    不過. 我做個假設

    如果今天你有一個連結是"test/test.jpg"

    var test = "test/test.jpg";

    如果把這個宣告放進陣列裡.

    arguments.push(test);

    這樣一來, arguments[0]就會等於"test/test.jpg"

    2008-02-01 18:57:20 補充:

    那麼在此arguments扮演裝什麼??

    迴圈出來那些容器是做什麼用?

    程式的邏輯是從上到下, 你這樣的問題, 其實我很難回答你.

    因為沒有arguments的長度變數, 就沒辦法找出陣列裡的資料.

    沒有陣列的資料, 就沒辦法產生個別的元件容器,

    沒有原件容器, 底下的this.onEnterFrame就根本沒有作用, 因為根本就沒有"this"這個東西

    2008-02-01 18:59:57 補充:

    一開始疑問備註,在這裡arguments是關鍵字名稱,有作用無法替代?

    它當然可以被代替.

    但是在一開始的宣告就要先宣告好.

    就如你第一的疑問.

    你直接寫var RPG = test.length;

    可是如果你一開始沒有宣告var test = new Array()的話

    flash怎麼會知道你的test是一個陣列. 那就更不用說下面的程式了

    2008-02-02 15:41:02 補充:

    arguments[0]-[9] 不是容器!!

    arguments[0]-[9]是argument陣列裡面的資料.

    利用this = eval(arguments[i])所得到的"this"才是所謂的"容器"

    也不能說是容器, 正確的說this就是一個數值或是元件(以這個例子他是個元件)

    所以底下才能用"this".onEnterFrame. (當這個物件進入影格的時)

    2008-02-02 15:45:02 補充:

    var test = new Array()

    var RPG = test.length;

    我上面就已經說過了, 你po出來的程式, 是不完整的!!

    也就是說, 這個例子裡面的argument陣列是在其他地方就已經先宣告好了. 而你po出來的程式, 我相信也只是一個project裡面的其中一個小功能而已, 你這樣去宣告陣列當然是沒有用的.

    2008-02-02 15:51:35 補充:

    我真的還是要建議你, 不管是寫程式, 還是去看程式.

    如果你還是初學者還是一步一步的從頭開始對你會比較好.

    今天你只是從整個的project去把其中的一段擷取出來,

    這樣你當然會有很多很多的問題.

    例如陣列的宣告, 或是迴圈的用法和基本觀念等...

    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.