AS3敌人双倍的速度?双倍、敌人、速度

由网友(是梦终会醒)分享简介:我已经做了一个游戏在Flash CS6使用AS3和空中3.2 Android版,目前这款游戏,你去不同的菜单,当你死了,它会返回到主菜单,并显示你的分数,现在,当你选择一个新的性格和再剧透,怪物速度翻倍!?!?任何想法,为什么?我可以给你我的一块code,但我真的不知道什么部分是问题吗?会不会是因为没有删除的事件监听器...

我已经做了一个游戏在Flash CS6使用AS3和空中3.2 Android版,目前这款游戏,你去不同的菜单,当你死了,它会返回到主菜单,并显示你的分数,现在,当你选择一个新的性格和再剧透,怪物速度翻倍!?!?

任何想法,为什么?我可以给你我的一块code,但我真的不知道什么部分是问题吗?会不会是因为没有删除的事件监听器?

下面是调用该函数开始拉平

 公共职能startLevel1(navigationEvent:NavigationEvent):无效
    {
        // classSelect = NULL;
        removeChild之(classSelect);
        levelManager =新LevelManager(heroGra,英雄);
        的addChild(levelManager);
        levelManaOn = TRUE;

        gameTimer =新的定时器(30);
        //在每个30毫秒,我们称之为APON moveEvent功能
        gameTimer.addEventListener(TimerEvent.TIMER,打勾);
        gameTimer.start();

    }
 

下面是调用更新功能的怪物被删除Tick事件

 公共职能蜱(tim​​erEvent:TimerEvent):无效
    {
        如果(levelManaOn ==真)
        {
            levelManager.update();
            如果(hero.hp&所述; = 0)
            {
                跟踪(死);
                onScoreState();
                levelManaOn = FALSE;
                removeEventListener(TimerEvent.TIMER,打勾);
            }
        }
    }
 
元气骑士 双倍攻速加无限蓝,搭配这四种打法,收获快乐源泉

从Tick事件,它会调用这个函数

 公共职能onScoreState():无效
    {
        scoreState =新ScoreState();
        scoreState.waveCompletedScore.text = levelManager.level.score.toString();
        //
        scoreState.addEventListener(NavigationEvent.ENDGAME,backMainMenu);
        的addChild(scoreState);
        removeChild之(levelManager);
    }
 

这将删除levelManager,但仍怪物移动以双倍速度,每次从头开始重新dieing后,速度再翻一番,并再次,任何想法,为什么?

感谢您阅读并帮助

画布

解决方案

  gameTimer =新的定时器(30);
    //在每个30毫秒,我们称之为APON moveEvent功能
    gameTimer.addEventListener(TimerEvent.TIMER,打勾);
    gameTimer.start();
 

我敢打赌,这code是不会被删除的第一个定时器再次被执行。

您需要调用 removeEventListener(TimerEvent.TIMER,打勾); 作为你的 gameTimer 对象的方法。像这样的:

gameTimer.removeEventListener(TimerEvent.TIMER,打勾);

请确保你保持一个参考 gameTimer 。也可做 gameTimer.stop(); 删除监听器之前

I have made a game in flash CS6 using AS3 and Air 3.2 for Android, now this game you go to different menus, when you die, it will go back to main menu and show your score, now when you select a new character and play through again, the monsters speed are doubled!?!?

Any idea why? I can give you a piece of my code but I'm really not sure on what part is the problem? would it be a event listener that wasn't deleted?

Here is the function that is called to started the level off

public function startLevel1( navigationEvent:NavigationEvent ):void
    {
        //classSelect = null;
        removeChild( classSelect );
        levelManager = new LevelManager( heroGra, hero);
        addChild( levelManager );
        levelManaOn = true;

        gameTimer = new Timer( 30 );
        //On every 30ms we call apon moveEvent function
        gameTimer.addEventListener( TimerEvent.TIMER, tick );
        gameTimer.start();

    }

Here is the tick event that is deleted that calls the updated function for the monsters

    public function tick( timerEvent:TimerEvent ):void
    {
        if(levelManaOn == true)
        {
            levelManager.update();
            if(hero.hp <= 0)
            {
                trace("DEAD");
                onScoreState();
                levelManaOn = false;
                removeEventListener( TimerEvent.TIMER, tick );
            }
        }
    }

From tick event, it will call this function

public function onScoreState( ):void
    {
        scoreState = new ScoreState();
        scoreState.waveCompletedScore.text = levelManager.level.score.toString();
        //
        scoreState.addEventListener( NavigationEvent.ENDGAME, backMainMenu );
        addChild( scoreState );
        removeChild( levelManager );
    }

this removes levelManager, but still the monsters move at double the speed, and every time you restart from the beginning after dieing, the speed is doubled again, and again, any idea why?

Thank you reading and for the help

Canvas

解决方案

    gameTimer = new Timer( 30 );
    //On every 30ms we call apon moveEvent function
    gameTimer.addEventListener( TimerEvent.TIMER, tick );
    gameTimer.start();

I bet this code is being executed again without the first timer being removed.

You need to call removeEventListener( TimerEvent.TIMER, tick ); as a method on your gameTimer object. Like this:

gameTimer.removeEventListener( TimerEvent.TIMER, tick );

Make sure you keep a reference to gameTimer. Also do gameTimer.stop(); before you remove the listener.

阅读全文

相关推荐

最新文章