【问题标题】:Global Variables and GlowFilters is not working全局变量和 GlowFilters 不起作用
【发布时间】:2013-09-11 14:11:33
【问题描述】:

大家好,

我是 actionscript3 的新手,我无法解决我的代码中的一些问题。第一个问题是发光过滤器没有运行。根据我的研究,glowfilter 的 alpha 是这样设置的,但是,当我单击真正的答案时,它没有响应。但是我尝试算法会输入正确的情况。第二个问题是我想将写答案定义为全局,但是当我在函数中更改了 rightAnswer 时它没有改变,我怎么能解决这个问题?我认为在 actionscript 中定义全局变量与 c 不同。

感谢您的帮助,对不起我的英语不好!

<s:Button id="answer1" width="388" height="68" label="" cornerRadius="16"
              fontFamily="Georgia" fontSize="17" click="checkanswers(1)">
        <s:filters>
            <mx:GlowFilter id="answer1_glow" color="0x00ff00" alpha="0" strength="3"/>
            <mx:GlowFilter id="answer1_glow2" color="0xff0000" alpha="0" strength="3"/>
        </s:filters>
    </s:Button>
    <s:Button id="answer2" width="388" height="68" label="" cornerRadius="16"
              fontFamily="Georgia" fontSize="17" click="checkanswers(2)">
        <s:filters>
            <mx:GlowFilter id="answer2_glow" color="0x00ff00" alpha="0" strength="3"/>
            <mx:GlowFilter id="answer2_glow2" color="0xff0000" alpha="0" strength="3"/> 
        </s:filters>
    </s:Button>
    <s:Button id="answer3" width="388" height="68" label="" cornerRadius="16"
              fontFamily="Georgia" fontSize="17" click="checkanswers(3)">
        <s:filters>
            <mx:GlowFilter id="answer3_glow" color="0x00ff00" alpha="0" strength="3"/>
            <mx:GlowFilter id="answer3_glow2" color="0xff0000" alpha="0" strength="3"/>
        </s:filters>
    </s:Button>
    <s:Button id="answer4" width="388" height="68" label="" cornerRadius="16"
              fontFamily="Georgia" fontSize="17"  click="checkanswers(4)">
        <s:filters>
            <mx:GlowFilter id="answer4_glow" color="0x00ff00" alpha="0" strength="3"/>
            <mx:GlowFilter id="answer4_glow2" color="0xff0000" alpha="0" strength="3"/>
        </s:filters>
    </s:Button>

</s:VGroup>
<fx:Script>
    <![CDATA[
        import flash.events.TimerEvent;
        import flash.utils.Timer;

        import mx.controls.Alert;
        import mx.events.FlexEvent;

        import mx.core.FlexGlobals;
        import mx.events.FlexEvent;

        private var baseTimer:int;
        private var t:Timer;
        private const TIMER_INTERVAL:Number = 10;


        public var rightAnswer:int = 0 ;     // ---> ı want to use a global rightAnswer .

        public function checkanswers(answer:int):void{
        trace("answer is " + answer );  
        trace("rightanswer is " + rightAnswer);
               if ( answer == rightAnswer) {
                       switch (answer) {
                       case 1 :
                          answer1.label = "green"; 
                          answer1.alpha = 1;  // ı want to change glowfilters alpha in there.
                           break;
                       case 2 :
                          answer2.label = "green"; 
                          answer2_glow.alpha = 1; 
                           break;
                       case 3 :
                           answer3.label = "green"; 
                          answer3_glow.alpha = 1; 
                           break;
                       case 4 :
                           answer4.label = "green"; 
                          answer4_glow.alpha = 1;  
                           break;
                       default :

                           break;
                   }
             } 
               else{
                   switch (answer) {
                       case 1 :
                           answer1.label = "red";
                           answer1_glow2.alpha = 1; 
                           break;
                       case 2 :
                           answer2.label = "red";
                           answer2_glow2.alpha = 1.0; 
                           break;
                       case 3 :
                           answer3.label = "red;
                           answer3_glow2.alpha = 1.0; 
                           break;
                       case 4 :
                           answer4.label = "red";
                           answer4_glow2.alpha = 1.0;  
                           break;
                       default :

                           break; 

               }

                   switch (rightAnswer) {
                       case 1 :
                           answer1.label = "green"; 
                           answer1_glow.alpha = 1; 
                           break;
                       case 2 :
                           answer2.label = "green"; 
                           answer2_glow.alpha = 1; 
                           break;
                       case 3 :
                           answer3.label = "green"; 
                           answer3_glow.alpha = 1; 
                           break;
                       case 4 :
                           answer4.label = "green"; 
                           answer4_glow.alpha = 1;  
                           break;
                       default :

                           break;
                   }

               }               
}              

        public function application1_creationCompleteHandler(event:FlexEvent):void
        {
            // TODO Auto-generated method stub
            soru.text = " En büyük kim ?";
            answer1.label = "Galasaray";
            answer2.label = "Bursaspor";
            answer3.label = "Beşiktaş";
            answer4.label = "Fenerbahçe";
            var rightAnswer:int = 2;
            trace(" rightAnswer fonkideki " + rightAnswer); 
        }

    ]]>
</fx:Script>

【问题讨论】:

  • rightAnswer 在您的代码中设置为 0,因此无论您点击什么,它都不会评估为 true
  • 即使我没有设置为 0,它会自动设置为 0。但是我将代码更改为当每个新问题都来自数组时,我想将 rightAnswer 的新值分配给全局变量rightAnswer,但即使在我调用问题准备函数的基本情况下,我也需要更改 public var rightAnswer:int 的值。
  • 我的意思是我会在一分钟内给你写一个答案

标签: actionscript-3 apache-flex flex4.5 flexbuilder


【解决方案1】:

你的问题是变量范围,它没有做你认为它正在做的事情。
当您使用关键字“var”时,您将在当前范围内创建一个新变量。
在这种情况下,您尝试将 2 分配给类级别变量“rightAnswer”,而实际上您正在创建一个名为“rightAnswer”的新变量,其范围为函数级别。

    public function application1_creationCompleteHandler(event:FlexEvent):void
    {
        // TODO Auto-generated method stub
        soru.text = " En büyük kim ?";
        answer1.label = "Galasaray";
        answer2.label = "Bursaspor";
        answer3.label = "Beşiktaş";
        answer4.label = "Fenerbahçe";
        var rightAnswer:int = 2; // <<<<--- right here is your problem
        trace(" rightAnswer fonkideki " + rightAnswer); 
    }

所以改为这样做。

    public function application1_creationCompleteHandler(event:FlexEvent):void
    {
        // TODO Auto-generated method stub
        soru.text = " En büyük kim ?";
        answer1.label = "Galasaray";
        answer2.label = "Bursaspor";
        answer3.label = "Beşiktaş";
        answer4.label = "Fenerbahçe";
        var rightAnswer:int = 12345678; // <<<<--- right here is your problem
        this.rightAnswer = 2; // <<<<--- here is your correction
        trace(" rightAnswer class level" + this.rightAnswer);
        trace(" rightAnswer function level" + rightAnswer);// << -- this can only be accessed inside of the current function


    }

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 2022-12-20
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2017-05-20
    • 2013-09-21
    相关资源
    最近更新 更多