(Adobe Animate ActionScript) 如何使用 name、arry 和 lib() 从舞台中删除特定符号?

问题描述 投票:0回答:1

我对此感到非常沮丧。

首先,让您理解我的代码 - 我的目标是让用户随机选择一个单词,以每个字母都位于盒子内的方式出现在他们面前。 然后,如果用户单击名为“选择一个单词”的按钮,则会选择另一个单词并出现正确数量的框。

我有一系列这样的单词:

   var word_group_1 = ["abolsh", "absorbent", "betrayal", "frutish", "commensurate", "eonfident", "zite"]

我正在使用这个函数从该数组中选择一个随机单词,然后拼接它..效果很好:

function random_word_genereator() {

random = randomNumber(0, word_group_1.length);

//putting the chosen word from array in the chosen word variable
chosen_word = word_group_1[random]
 //after we used the chosen word were removing it from the away
word_group_1.splice(random, 1)
//splitting the chosen word into an array
chosen_word_letters_arry = chosen_word.split("")
}

单击“选择一个单词”按钮,我正在创建库中的 Movieclip 的 5 个实例(只是一个用于在其中放置文本的蓝色框),其中的文本如下所示:

function create_boxes(e)    
{

//to know which word has been displayed to the user//
old_word=chosen_word
random_word_genereator()    
for (i=0;i<chosen_word.length;i++){

     cell_boxes = new lib.cell_box();   
    stage.addChild(cell_boxes)
    cell_boxes.name="cell_box"+i;
    cell_boxes.x=(xlocation * i) + 50
    cell_boxes.y = 80;
    
    output = new createjs.Text();
    cell_boxes.addChild(output)
        
    output.text=chosen_word_letters_arry[i]
}

第一次点击一切正常正如您可以在此处查看

正在选择的单词并显示在舞台上

我的问题是当我再次单击“选择一个单词”按钮时 它没有删除正确数量的盒子。

我将可见的 false 放入保存“旧词”(我需要删除的词)的框中 但是正如你可以在这里看到的,当我再次点击之后,它变得一团糟。

有时它会起作用,从 12 个字母的单词切换到 4 个字母的单词。 但这应该是运气。

actionscript jquery-animate adobe removechild
1个回答
0
投票

简单的答案将插入并运行到您的代码中:

js
...

//to know wichh word has been displayed to the user//
old_word=chosen_word
random_word_genereator()    

for (i = 0; i < stage.numChildren; i++) // Loop through all children of the stage
    if (stage.getChildAt(i) is lib.cell_box) // Checks if the child is a lib.cell_box
        stage.removeChildAt(i--); // Removes child from stage and decrements i

for (i=0;i<chosen_word.length;i++){

...

原始答案(更清晰的代码,一些重组):

最好将这种逻辑分解为步骤。

var boxes:MovieClip = new MovieClip();
boxes.y = 80;
addChild(boxes);

...

function createBoxes(word:String):void {
    // Remove boxes first
    while (boxes.numChildren > 0)
        boxes.removeChildAt(0);

    // Add boxes
    for each(var c:String in word.split("")) {
        var box:Box = new Box(c);
        box.x = boxes.width + 50;
        boxes.addChild(box);
    }
}

然后在 Box 类中设置文本。

© www.soinside.com 2019 - 2024. All rights reserved.