2

我对 Flash 很陌生,我正在我的网站上进行地形测验。

我的地形测验的目标是按随机顺序获得 72 个城市名称问题。我已经做了这个,但问题是,因为顺序是随机的,问题可能会回来。因此,如果您完成了一个问题,它以后一定不能再回来。我想我可以通过给每一帧都赋予一个变量来解决这个问题,这些帧在开始时都具有值“2”。如果您转到一个框架并输入正确的城市名称,该框架的变量将变为“1”。如果您输入了错误的答案,变量将变为“0”。在每一帧的开头我都写了:“if(city01 == 2){”所以如果你之前从未有过这个问题,那么你只会得到这个问题。如果没有,您将进入下一个(随机)帧。

在第一帧我定义了变量:

var input:String;
var randomnumber:int;

var city01:int = 2;
var city02:int = 2;
var city03:int = 2;
var city04:int = 2;
etc. etc. etc.

这是一个问题框架的代码示例:

    stop();
if(city26 == 2){


okButton.addEventListener(MouseEvent.CLICK, okClickcity26);

function okClickcity26(event:MouseEvent):void{
    input = textbox.text;
    if(input == "Dakar"){
        city26 = 1; 
    }else{
        city26 = 0; 
    }

    randomnumber = Math.floor(Math.random()*(1+73-3))+3;
    gotoAndStop(randomnumber);
}
}else{
    randomnumber = Math.floor(Math.random()*(1+73-3))+3;
    gotoAndStop(randomnumber);
    }

Flash 确实将变量更改为“1”或“2”,但也只是显示问题而不转到下一帧。

所以 Flash 在最后执行代码:

    else{
randomnumber = Math.floor(Math.random()*(1+73-3))+3;
gotoAndStop(randomnumber);
}

但不会去那个随机帧......

有人知道我做错了什么吗?

这是我在论坛上的第一个问题,所以我希望我能很好地解释我的问题,所以你可以帮助我。谢谢。

4

1 回答 1

0

我可以提供一个不同的解决方案:也许你可以使用一组问题 ids/ints(看起来你可能已经有了),然后在洗牌之后,只需一个接一个地弹出 ids 就不会重复?

也许这比尝试跟踪每个问题的每个状态更容易,然后检查随机数的生成。只是不确定,我看到了问题,因为您想以随机顺序解决单个问题,但在看到它们后没有重复。



编辑:添加了使用数组的代码示例

数组(在这种情况下)可以充当问题 ID(数字)的动态列表,您可以通过索引或许多方法访问其中。因此,您可以将这些数字/ID 关联到一个框架并跳转到它们。

它们实际上在语言中很常见(尽管它们可能被称为不同)并且非常有用。在您的原始代码中,我将使用长度为 72 的单个数组来保存我的值,而不必一个一个地定义 72 个变量(city01、city02、city03 等)。

我强烈建议您在 actionscript 3 中阅读它们(因为这是您正在使用的):http ://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html

在代码中使用数组来显示我在原始答案中的意思的示例:

// create an array called "questionIds"
var questionIds:Array = new Array();

// using a loop to add ints 0 to 71 to the array
for(var counter:int = 0; counter < 72; counter++){
    questionIds.push(counter);
}

// the array contains the numbers 0 to 71 in order now, shuffle them in to a random order
trace("Preshuffled array: {"+ questionIds +"}");

questionIds.sort(function (inputA:int, inputB:int):int {
    return (Math.floor(Math.random() * 3) - 1);
});

trace("\nShuffled array: "+ questionIds +"}");

//to get a int from the array, can use pop() method, which removes and returns the last element on the array
// since that number is removed, it will never appear again
var currentId:int = questionIds.pop();

// can keep calling pop() method on the array to return the next last number
// what you do with the value of "currentId" is up to you -however you go to your question in your quiz
currentId = questionIds.pop();
trace(currentId);

// you can also check how many elements are left in the array by checking the length of it:
trace(questionIds.length); // which should be 70 left now as it started with 72 and 2 items were pop()'ed off

// when it hits 0, there are no more items left in the array, (calling pop() will then return "undefined")
if(questionIds.length == 0){
    trace("no more items left");
}
于 2013-02-18T23:47:21.843 回答