我在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
答案 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);