AS3敌人双倍的速度? [英] AS3 enemies double speed?

查看:122
本文介绍了AS3敌人双倍的速度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经做了一个游戏在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.

这篇关于AS3敌人双倍的速度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆