【问题标题】:Action Script 3. How to add timer?Action Script 3. 如何添加定时器?
【发布时间】:2013-04-24 16:59:14
【问题描述】:

我正在创建 Flash“记忆”游戏,旨在发现 2 张相等的卡片。但是当我选择1时,如果第二张卡错了它只发现半秒,但这还不够。我需要让第二张卡片显示 2-3 秒。如何添加计时器?

这是部分代码:

        else
        {
            trace("wrong");
            _message = "wrong";
            message_txt.text = _message;
            _firstCard.gotoAndPlay("flipBack");
            event.currentTarget.gotoAndPlay("flipBack");
            _firstCard.addEventListener(MouseEvent.CLICK, checkCards);
            event.currentTarget.addEventListener(MouseEvent.CLICK, checkCards);
            _firstCard = undefined;             
        }

感谢您的回答。

已更新完整代码

package
{
    import flash.display.MovieClip;
    import Card;
    import Boarder;
    import BlueBoard;
    import flash.events.MouseEvent;
    import RedBoard;
    import Snow;

    public class MemoryGame extends MovieClip
    {
        private var _card:Card;
        private var _boarder:Boarder;
        private var _blueBoard:BlueBoard;
        private var _cardX:Number;
        private var _cardY:Number;
        private var _firstCard:*;
        private var _totalMatches:Number;
        private var _currentMatches:Number;
        private var _redBoard:RedBoard;
        private var _snow:Snow;
        private var _cards:Array;
        public var  _message:String;

        public function MemoryGame()
        {
            _cards = new Array();
            _totalMatches = 4;
            _currentMatches = 0;
            createCards();
        }

        private function createCards():void
        {
            _cardX = 45;
            _cardY = 10;

            for(var i:Number = 0; i < 2; i++)
            {
                _card = new Card();
                addChild(_card);
                _boarder = new Boarder();
                _card.setType(_boarder);
                _card.x = _cardX;
                _card.y = _cardY;
                _cardX += _card.width + 50;
                _card.addEventListener(MouseEvent.CLICK, checkCards);
                _cards.push(_card);
            }

            for(var j:Number = 0; j < 2; j++)
            {
                _card = new Card();
                addChild(_card);
                _blueBoard = new BlueBoard();
                _card.setType(_blueBoard);
                _card.x = _cardX;
                _card.y = _cardY;
                _cardX += _card.width + 50;
                _card.addEventListener(MouseEvent.CLICK, checkCards);
                _cards.push(_card);
            }

            _cardX = 45;
            _cardY = _card.height + 30;

            for(var k:Number = 0; k < 2; k++)
            {
                _card = new Card();
                addChild(_card);
                _redBoard = new RedBoard();
                _card.setType(_redBoard);
                _card.x = _cardX;
                _card.y = _cardY;
                _cardX += _card.width + 50;
                _card.addEventListener(MouseEvent.CLICK, checkCards);
                _cards.push(_card);
            }

            for(var l:Number = 0; l < 2; l++)
            {
                _card = new Card();
                addChild(_card);
                _snow = new Snow();
                _card.setType(_snow);
                _card.x = _cardX;
                _card.y = _cardY;
                _cardX += _card.width + 50;
                _card.addEventListener(MouseEvent.CLICK, checkCards);
                _cards.push(_card);
            }

            randomizeCards(_cards);
        }

        private function checkCards(event:MouseEvent):void
        {
            event.currentTarget.removeEventListener(MouseEvent.CLICK, checkCards);

            if(_firstCard == undefined)
            {
                _firstCard = event.currentTarget;
            }
            else if(String(_firstCard._type) == String(event.currentTarget._type))
            {
                trace("match");
                _message = "match";
                message_txt.text = _message;
                _firstCard = undefined;
                _currentMatches ++;
                if(_currentMatches >= _totalMatches)
                {
                    trace("YOU WIN !!!");
                    _message = "YOU WIN !!!";
                    message_txt.text = _message;
                }
            }
            else
            {
                trace("wrong");
                _message = "wrong";
                message_txt.text = _message;
                _firstCard.gotoAndPlay("flipBack");
                event.currentTarget.gotoAndPlay("flipBack");
                _firstCard.addEventListener(MouseEvent.CLICK, checkCards);
                event.currentTarget.addEventListener(MouseEvent.CLICK, checkCards);
                _firstCard = undefined;             
            }
        }

        private function randomizeCards(cards:Array):void
        {
            var randomCard1:Number;
            var randomCard2:Number;
            var card1X:Number;
            var card1Y:Number;

            for(var i:Number = 0; i < 10; i++)
            {
                randomCard1 = Math.floor(Math.random() * cards.length);
                randomCard2 = Math.floor(Math.random() * cards.length);

                card1X = cards[randomCard1].x;
                card1Y = cards[randomCard1].y;
                cards[randomCard1].x = cards[randomCard2].x;
                cards[randomCard1].y = cards[randomCard2].y
                cards[randomCard2].x = card1X;
                cards[randomCard2].y = card1Y;
            }
        }
    }
}

【问题讨论】:

    标签: actionscript-3 flash actionscript timer flash-cs5


    【解决方案1】:

    您可以使用http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html。顺便说一句,请注意 Timer 构造函数的默认第二个参数是 0 暗示计时器将无限期运行。请务必为您的案例将其标记为 1。

    您需要将“else”块中的代码移动到另一个函数,并在 else 块中设置计时器。

    最终的代码如下所示:

    else
    {
        trace("wrong");
        _message = "wrong";
        message_txt.text = _message;
    
        _secondCard = event.currentTarget;//You need to have this variable defined alongwith _firstCard
    
        var timer:Timer = new Timer(2000, 1);
        timer.addEventListener(TimerEvent.TIMER_COMPLETE, flipBack);
        timer.start();
    }
    

    该函数将具有:

    protected function flipBack(event:TimerEvent):void
    {
        _firstCard.gotoAndPlay("flipBack");
        _sedondCard.gotoAndPlay("flipBack");
        _firstCard.addEventListener(MouseEvent.CLICK, checkCards);
        _secondCard.addEventListener(MouseEvent.CLICK, checkCards);
        _firstCard = _secondCard = undefined;             
    }
    

    HTH。

    【讨论】:

    • 非常感谢您的回答,但我真的不明白我需要在哪里使用这个构造函数。第二个参数呢?你能帮我多一点吗?
    • 用一个例子更新了我的答案。
    • 谢谢你的回答我会试试的。如果您需要查看它,我用完整代码更新了我的问题
    • 更新了答案以容纳更多详细的代码。另外,请注意需要的额外变量 _sedondCard。
    • 感谢您的回答。这工作,但我发现 1 错误。当显示第二张卡时,我可以发现第三张卡并且出现错误。我需要在显示第二张卡时进行暂停/禁用发现功能之​​类的操作。有任何想法吗?非常感谢。
    【解决方案2】:

    如果只是等待一定时间,可以使用setTimeout(flash.utils)

    http://livedocs.adobe.com/flash/9.0_fr/ActionScriptLangRefV3/flash/utils/package.html#setTimeout()

    【讨论】:

    • 是的,这是我需要的,但我不知道如何在我的应用程序中正确使用它,我尝试后,我的应用程序无法运行。我没有收到任何错误,只是卡片根本没有出现在屏幕上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多