Flash Builder组件和循环

时间:2012-03-08 14:58:36

标签: flash flex flash-builder

我只是对编码很感兴趣,这在很大程度上要归功于这个网站...但我仍然是菜鸟,还有另一个菜鸟问题。

我已经创建了一个简单的计算器,我的孩子可以使用它来处理他们的数学技能,但我不知道如何循环它以便它会去10次。我理解for-else和until循环的语法,但不知道在循环中放入什么。

最简单的方法(我认为)可能是使用组件或类(不确定使用哪个)然后调用它。

那就是说,这是我的基本代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

<fx:Script>
    <![CDATA[
        import spark.components.FormItem;
        import spark.components.TextInput;

        public var n_1:Number = Math.round(Math.random() * 100)
        public var n_2:Number = Math.round(Math.random() * 100)
        public var ttl:Number 
        public var answer:Number
        public var n_right:int
        public var n_total:int = 1


        protected function check_bn_clickHandler(event:MouseEvent):void
        {
            n1.text = n_1.toString();
            n2.text = n_2.toString();
            ttl = Number(total.text);
            answer = n_1 + n_2
        if(ttl == answer) {
            yes_no_lbl.text = "YES, click NEXT!";
            n_right = n_right + 1


        } else { 
            yes_no_lbl.text = "NO, try again!";

        }

        }
        protected function next_bn_clickHandler(event:MouseEvent):void
        {
            // reset variables
            n_1 = 0
            n_2 = 0
            ttl = 0 
    // use component here????

        }

    ]]>
</fx:Script>



<fx:Declarations>

    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>


<s:Form id="Calc" x="28" y="27">
    <s:FormItem label="1st #">
        <s:Label id="n1" text = "{n_1.toString()}"/>
    </s:FormItem>
    <s:FormItem label="2nd#">
        <s:Label id="n2" text = "{n_2.toString()}"/>
    </s:FormItem>
    <s:FormItem label="Total=">
        <s:TextInput id="total" prompt="Total"/>
    </s:FormItem>
</s:Form>
<s:Button id="check_bn" x="273" y="124" label="Check" click="check_bn_clickHandler(event)"/>
<s:Button id="next_bn" x="377" y="123" label="Next" click="next_bn_clickHandler(event)"/>
<s:Form id="display_correct" x="649" y="27">
    <s:FormItem label="# Correct">
        <s:Label id="lbl_ratio" text="{n_right}/{n_total} "/>
    </s:FormItem>
</s:Form>
<s:Label id="yes_no_lbl" x="462" y="83" width="184" height="61"/>
</s:Application>

那么我在组件中放了多少这个,以及我在应用程序中留下了多少?或者是否有“重绘”这样的功能可以再次运行应用程序,但只留下我的长期变量(n_right等)?

再次感谢!

2 个答案:

答案 0 :(得分:1)

好像你想要做的就是生成一个新的随机问题?

protected function next_bn_clickHandler(event:MouseEvent):void
{
    if (yes_no_lbl.text == "YES, click NEXT!")
    {
        // reset variables
        n_1 = Math.round(Math.random() * 100);
        n_2 = Math.round(Math.random() * 100);

        total.text = "";
        yes_no_lbl.text = "";
        n_total++;      
    }
}

这会生成两个新的随机数,清除yes_no_lbl,清除total,并递增n_total。我添加了一个逻辑检查,确保在提出新问题之前问题得到了正确回答。

您还应该制作n_1 / n_2个变量[Bindable],因为这会确保标签更新以在更改时显示新值。

答案 1 :(得分:1)

你需要(至少:)两件事:

1)当你生成下一个问题时,你需要生成两个新的随机数(正如Sam刚刚指出的那样)

2)制作包含随机数的变量[Bindable]。否则,您的文本框将不会使用其新值进行刷新。 (只需在声明中的每个[Bindable]之前写下var

[Bindable] public var n_1:Number = Math.round(Math.random() * 100)
[Bindable] public var n_2:Number = Math.round(Math.random() * 100)