如何在AS3中随机创建的数字列表中显示最高值

时间:2012-11-01 22:12:28

标签: actionscript-3 flash

我在Flash(AS3)中构建一种游戏,其中声音输入(麦克风)触发均衡器( micLevel.height 控制遮罩的高度(显示均衡器)。<麦克风的strong> activityLevel 给了我一个数字(0 - 100),它显示在文本域 prosent 。参赛者在麦克风中喊叫并尝试达到100(我使用 mc.gain 让它很难达到100)。到目前为止一切都那么好!我对AS3很陌生,所以我觉得有点失落。

我需要显示他们设法达到的最高数量,我希望有一个时间限制。 最高声级可以说是5秒。

以下是目前的代码:

var mic:Microphone = Microphone.getMicrophone();

Security.showSettings("privacy");
mic.setLoopBack(true);

if(mic != null)
{
    mic.setUseEchoSuppression(true);
    stage.addEventListener(Event.ENTER_FRAME, showLevel);
}

function showLevel(e:Event)
{
    micLevel.height = mic.activityLevel * 6;
    //mic.gain = 1;
    //trace(mic.activityLevel);
    prosent.text = "Activity: " + String(mic.activityLevel) + "%";
}

我只需要一些代码从文本字段“prosent”获取最高数字(带有时间限制)并将其显示在新文本字段中。

对不起,如果我不清楚,但如果有人能帮助我,我会非常高兴!

Br Harald

2 个答案:

答案 0 :(得分:1)

只需创建一个变量,只要micLevel.height值高于它,就会更新,例如。

var highest:Number = 0;

function showLevel(e:Event):void
{
    if(micLevel.height > highest)
    {
        // The mic level was higher than the previous highest level.
        highest = micLevel.height;

        // Change your other text field to show the value of 'highest'.
        // ..
    }

    prosent.text = "Activity: " + String(mic.activityLevel) + "%";
}

答案 1 :(得分:1)

启动计时器以重置最高级别的var。这将显示每5秒钟的最高级别。如果你想保持一个最高的始终显示,你也可以添加一个计时器开始 - 停止按钮。

然后在showLevel函数中,使用Math.max()获取最高数字(当前活动与最近活动之间)

var highestLevel:Number = 0;
var timer:Timer = new Timer(5000); // fires every 5 seconds

function initLevels(e:TimerEvent){
  timer.stop(); // you could stop your timer here automatically and then use a button to start again
  highestLevel = 0;  // when timer fires restart your highestLevels var
}

function showLevel(e:Event) {
  highestLevel = Math.max(mic.activityLevel * 6, highestLevel);
  prosent.text = "Activity: " + String(highestLevel) + "%";
}

timer.start();
timer.addEventListener(TimerEvent.TIMER, initLevels);
addEventListener(Event.ENTER_FRAME, showLevel);