Actionscript 3 As3检查计时器用完时电影剪辑是否可见

Actionscript 3 As3检查计时器用完时电影剪辑是否可见,actionscript-3,flash,Actionscript 3,Flash,几年前发布了一个非常类似的问题,这个有用的答案让我了解了一部分,但作为AS3的新手,我需要更多的帮助才能到达终点线 以下是我想做的: 我正在整理9个电影剪辑。我需要能够检测到什么时候没有更多的项目需要排序 我想创建一个倒计时计时器,从30秒开始倒计时,并显示在屏幕上的动态文本框中(我是一个完全的新手;执行下面的代码对我来说是一个巨大的挑战,即使在多次关于计时器的教程之后,我也无法让它工作。代码在我的文件中被注释掉;我从下面删除了它) 我想我需要创建一个项目数组,但不确定如何创建并将其合并到计时器

几年前发布了一个非常类似的问题,这个有用的答案让我了解了一部分,但作为AS3的新手,我需要更多的帮助才能到达终点线

以下是我想做的:

  • 我正在整理9个电影剪辑。我需要能够检测到什么时候没有更多的项目需要排序
  • 我想创建一个倒计时计时器,从30秒开始倒计时,并显示在屏幕上的动态文本框中(我是一个完全的新手;执行下面的代码对我来说是一个巨大的挑战,即使在多次关于计时器的教程之后,我也无法让它工作。代码在我的文件中被注释掉;我从下面删除了它)
  • 我想我需要创建一个项目数组,但不确定如何创建并将其合并到计时器代码和条件语句中 我想可能是这样的:

    if (time==0 && itemsToSort >0) {
          goToAndPlay (2, "Try Again!");
    }
    if (time==0 && itemsToSort <1){
          goToAndPlay (5, "Great job!")
          cheer.play();
    }
    

    }

    如果您希望有剩余时间的视觉指示器,则使用
    计时器可能无法提供所需的灵活性。此外,您需要注册
    mouseOver
    mouseOut
    事件的按钮,以便应用

    stop();
    import flash.events.MouseEvent;
    import flash.display.MovieClip;
    import flash.media.Sound;
    
    var objectoriginalX:Number;
    var objectoriginalY:Number;
    var correct:Sound = new Toss();
    var incorrect:Sound = new Swoosh();
    var background:Sound = new Background();
    
    // For convenience (and lookup later), we add the buttons to an array.
    var btnArray = [cstrawberry, csandwich, cnapkin, rbottle, rcup, rfoil, lspork, ljuice, lyogurt];
    
    // Loop through the array, and register each to the events we need.
    for each (var button in btnArray) {
        button.buttonMode = true;
        button.addEventListener("mouseOver", buttonEvents);
        button.addEventListener("mouseOut", buttonEvents);
        button.addEventListener("mouseDown", buttonEvents);
        button.addEventListener("mouseUp", buttonEvents);
    }
    
    background.play();
    
    function buttonEvents(e:MouseEvent):void {
        // Here we handle all button states
        // Simplify references to the current button by creating a local var.
        var btn:MovieClip = e.currentTarget as MovieClip;
    
        switch (e.type) {
            case "mouseOver":
                // Show the dropdown.
                btn.filters = new Array(new DropShadowFilter(10, 90, 0, 0.25, 10, 10));
                break;
            case "mouseOut":
                // Hide the dropdown
                btn.filters = new Array(new DropShadowFilter(0, 90, 0, 0, 10, 10));
                break;
            case "mouseDown":
                // Drag the button and store the original locs
                btn.startDrag(true);
                btn.parent.addChild(btn);
                objectoriginalX = btn.x;
                objectoriginalY = btn.y;
                break;
            case "mouseUp":
                // Drop the drag, and evaluate if it was correct
                btn.stopDrag();   
    
                if (testIfMatch(btn.name, btn.dropTarget.parent.name)){
                    btn.removeEventListener("mouseDown", pickupObject);
                    btn.removeEventListener("mouseUp", dropObject);
                    btn.buttonMode = false;
                    btn.visible = false;
                    correct.play();
                } else {
                    btn.x = objectoriginalX; 
                    btn.y = objectoriginalY;
                    incorrect.play(); 
                }
                break;
        }
    }
    
    function testIfMatch(_drop:String, _target:String):Boolean {
        //check if the leading Letter for both Sprites is the same    
        if (_drop.substr(0, 1) == _target.substr(0, 1)) { 
            return true;  
        } else {
            return false ;
        }
    }
    
    // Let's create something to look at the countdown.
    var countdownTime:int = 30;
    var countdown:TextField = new TextField();
    countdown.text = "Time: " + countdownTime;
    addChild(countdown);
    
    
    stage.addEventListener(Event.ENTER_FRAME, updateCounter);
    var lastSecond:Number = flash.utils.getTimer();
    function updateCounter(e:Event):void {
        var now:Number = flash.utils.getTimer();
    
        // If more than one second has past, reset the lastSecond to now, and update the counter.
        if (now - lastSecond > 1000) {
            lastSecond += 1000;
            countdownTime--;
            countdown.text = "Time: " + countdownTime;
            if (countdownTime < 1) {
                stage.removeEventListener(Event.ENTER_FRAME, updateCounter);
    
                // Count how many are still visible
                var visibleButtons:int = 0;
                for each (btn in btnArray) {
                    if (btn.visible) {
                        visibleButtons++;
                    }
                }
    
                if (visibleButtons > 0) {
                    goToAndPlay (2, "Try Again!");
                } else {
                    goToAndPlay (5, "Great job!")
                    cheer.play();
                }
            }
        }
    }
    
    stop();
    导入flash.events.MouseEvent;
    导入flash.display.MovieClip;
    导入flash.media.Sound;
    var objectoriginalX:数字;
    var objectoriginalY:数字;
    var correct:Sound=new Toss();
    变量不正确:声音=新的Swoosh();
    变量背景:声音=新背景();
    //为了方便(以及以后的查找),我们将按钮添加到数组中。
    var btnArray=[cstrawberry、csandwich、cnapkin、rbottle、rcup、rfoil、lspork、ljuice、lyogurt];
    //循环遍历数组,并将每个数组注册到我们需要的事件。
    对于每个(btnArray中的var按钮){
    button.buttonMode=true;
    按钮。addEventListener(“鼠标悬停”,按钮按钮);
    按钮。addEventListener(“鼠标出”,按钮按钮);
    按钮。addEventListener(“鼠标向下”,按钮按钮);
    按钮。addEventListener(“mouseUp”,buttonEvents);
    }
    background.play();
    功能按钮事件(e:MouseeEvent):无效{
    //这里我们处理所有按钮状态
    //通过创建本地变量简化对当前按钮的引用。
    var btn:MovieClip=e.currentTarget作为MovieClip;
    开关(e型){
    案例“鼠标悬停”:
    //显示下拉列表。
    btn.filters=新阵列(新的DropShadowFilter(10,90,0,0.25,10,10));
    打破
    案例“mouseOut”:
    //隐藏下拉列表
    btn.filters=新阵列(新的DropShadowFilter(0,90,0,0,10,10));
    打破
    案例“mouseDown”:
    //拖动按钮并存储原始LOC
    btn.startDrag(正确);
    btn.parent.addChild(btn);
    objectoriginalX=btn.x;
    objectoriginalY=btn.y;
    打破
    案例“mouseUp”:
    //拖放,并评估其是否正确
    btn.stopDrag();
    if(testIfMatch(btn.name、btn.dropTarget.parent.name)){
    btn.removeEventListener(“鼠标向下”,pickupObject);
    btn.removeEventListener(“mouseUp”,dropObject);
    btn.buttonMode=false;
    btn.visible=false;
    正确。播放();
    }否则{
    btn.x=objectoriginalX;
    btn.y=对象初始值;
    不正确。play();
    }
    打破
    }
    }
    函数testIfMatch(_drop:String,_target:String):布尔值{
    //检查两个精灵的前导字母是否相同
    如果(_drop.substr(0,1)==_target.substr(0,1)){
    返回true;
    }否则{
    返回false;
    }
    }
    //让我们创建一些东西来查看倒计时。
    var countdownTime:int=30;
    var倒计时:TextField=newtextfield();
    countdown.text=“时间:”+countdown;
    addChild(倒计时);
    stage.addEventListener(Event.ENTER\u FRAME,updateCounter);
    var lastssecond:Number=flash.utils.getTimer();
    函数updateCounter(e:事件):void{
    var now:Number=flash.utils.getTimer();
    //如果超过一秒,请将最后一秒重置为现在,并更新计数器。
    如果(现在-最后一秒>1000){
    最后一秒+=1000;
    倒计时--;
    countdown.text=“时间:”+countdown;
    如果(计数停机时间<1){
    stage.removeEventListener(Event.ENTER_FRAME,updateCounter);
    //计算仍可见的数量
    变量visibleButtons:int=0;
    对于每个(btnArray中的btn){
    如果(btn.可见){
    可视按钮++;
    }
    }
    如果(可视按钮>0){
    goToAndPlay(2,“再试一次!”);
    }否则{
    goToAndPlay(5,“干得好!”)
    加油。玩();
    }
    }
    }
    }
    
    此外,过滤器放置阴影代码也不起作用。我想让它在鼠标上方投下一个阴影,但它不起作用。在我的代码中有一点是不起作用的;不知道为什么。函数悬停(event:MouseEvent):void{this.filters=[new DropShadowFilter()];}对于按钮效果,如果使用内置的“按钮”符号(通过选择对象,按f8并转换为“按钮”),则可以编辑该按钮的时间线(通过双击)。它将有四个帧:正常、鼠标悬停、鼠标下键和单击。您可以更改这些,然后按钮将自动更改为相关帧(例如,鼠标悬停在按钮上方时鼠标悬停),无需代码。仍然不明白您的主要问题是什么。请定义一个,以便人们可以尝试回答您。
    stop();
    import flash.events.MouseEvent;
    import flash.display.MovieClip;
    import flash.media.Sound;
    
    var objectoriginalX:Number;
    var objectoriginalY:Number;
    var correct:Sound = new Toss();
    var incorrect:Sound = new Swoosh();
    var background:Sound = new Background();
    
    // For convenience (and lookup later), we add the buttons to an array.
    var btnArray = [cstrawberry, csandwich, cnapkin, rbottle, rcup, rfoil, lspork, ljuice, lyogurt];
    
    // Loop through the array, and register each to the events we need.
    for each (var button in btnArray) {
        button.buttonMode = true;
        button.addEventListener("mouseOver", buttonEvents);
        button.addEventListener("mouseOut", buttonEvents);
        button.addEventListener("mouseDown", buttonEvents);
        button.addEventListener("mouseUp", buttonEvents);
    }
    
    background.play();
    
    function buttonEvents(e:MouseEvent):void {
        // Here we handle all button states
        // Simplify references to the current button by creating a local var.
        var btn:MovieClip = e.currentTarget as MovieClip;
    
        switch (e.type) {
            case "mouseOver":
                // Show the dropdown.
                btn.filters = new Array(new DropShadowFilter(10, 90, 0, 0.25, 10, 10));
                break;
            case "mouseOut":
                // Hide the dropdown
                btn.filters = new Array(new DropShadowFilter(0, 90, 0, 0, 10, 10));
                break;
            case "mouseDown":
                // Drag the button and store the original locs
                btn.startDrag(true);
                btn.parent.addChild(btn);
                objectoriginalX = btn.x;
                objectoriginalY = btn.y;
                break;
            case "mouseUp":
                // Drop the drag, and evaluate if it was correct
                btn.stopDrag();   
    
                if (testIfMatch(btn.name, btn.dropTarget.parent.name)){
                    btn.removeEventListener("mouseDown", pickupObject);
                    btn.removeEventListener("mouseUp", dropObject);
                    btn.buttonMode = false;
                    btn.visible = false;
                    correct.play();
                } else {
                    btn.x = objectoriginalX; 
                    btn.y = objectoriginalY;
                    incorrect.play(); 
                }
                break;
        }
    }
    
    function testIfMatch(_drop:String, _target:String):Boolean {
        //check if the leading Letter for both Sprites is the same    
        if (_drop.substr(0, 1) == _target.substr(0, 1)) { 
            return true;  
        } else {
            return false ;
        }
    }
    
    // Let's create something to look at the countdown.
    var countdownTime:int = 30;
    var countdown:TextField = new TextField();
    countdown.text = "Time: " + countdownTime;
    addChild(countdown);
    
    
    stage.addEventListener(Event.ENTER_FRAME, updateCounter);
    var lastSecond:Number = flash.utils.getTimer();
    function updateCounter(e:Event):void {
        var now:Number = flash.utils.getTimer();
    
        // If more than one second has past, reset the lastSecond to now, and update the counter.
        if (now - lastSecond > 1000) {
            lastSecond += 1000;
            countdownTime--;
            countdown.text = "Time: " + countdownTime;
            if (countdownTime < 1) {
                stage.removeEventListener(Event.ENTER_FRAME, updateCounter);
    
                // Count how many are still visible
                var visibleButtons:int = 0;
                for each (btn in btnArray) {
                    if (btn.visible) {
                        visibleButtons++;
                    }
                }
    
                if (visibleButtons > 0) {
                    goToAndPlay (2, "Try Again!");
                } else {
                    goToAndPlay (5, "Great job!")
                    cheer.play();
                }
            }
        }
    }