2013-03-13 141 views
2

我正在使用此代碼來檢測使用ENTER_FRAME函數的鼠標速度。鼠標的速度會影響我在循環播放的MP3。通過使用ENTER_FRAME它以幀頻進行更新,並且使音樂的聲音非常混亂和混亂。AS3:影響速度的鼠標速度

有沒有一種方法來減輕音量(仍然使用ENTER_FRAME)或者我的mp3會不會受這種方式的影響?

var mySound1:Sound = new Sound(); 
mySound1.load(new URLRequest("AStringsMinor.mp3")); 

var myChannel1:SoundChannel = new SoundChannel(); 
var myTransform1:SoundTransform = new SoundTransform(); 
myChannel1 = mySound1.play(0, 999); 

var prevPt:Point = new Point(mouseX, mouseY); 

addEventListener(Event.ENTER_FRAME, mouseSpeed); 

function mouseSpeed(e:Event) 
{  
    var xspeed:Number = Math.abs(mouseX - prevPt.x);  
    var yspeed:Number = Math.abs(mouseY - prevPt.y);  
    var speed:Number = (xspeed + yspeed)/100; 
    prevPt = new Point(mouseX, mouseY);  

    myChannel1.soundTransform = myTransform1; 
    myTransform1.volume = speed; 
} 
+0

程序的FPS是什麼? – David 2013-03-13 14:16:17

+0

它只是標準的24 fps – Dan434 2013-03-13 14:32:44

+0

將它增加到60. – David 2013-03-13 14:55:46

回答

2

我相信你應該通過平均5秒鐘的鼠標速度緩解你的速度變化。

var speeds:Vector.<Number>; 
var spn:int; // how many are there 
var spi:int; // current index 
// into initialization code: 
spn=Math.ceil(5.0*stage.frameRate); // 5.0 is a number of seconds to average 
speeds=new Vector.<Number>(spn,true); 
for (spi=spn-1;spi>=0;spi--) speeds[spi]=0; // explicit init 
spi=0; 
// the function gets updated 
function mouseSpeed(e:Event) 
{  
    var xspeed:Number = Math.abs(mouseX - prevPt.x);  
    var yspeed:Number = Math.abs(mouseY - prevPt.y);  
    var speed:Number = (xspeed + yspeed)/100; 
    prevPt = new Point(mouseX, mouseY);  
    speeds[spi++]=speed; // record current speed 
    if (spi==spn) spi=0; // wrap 
    speed=0; 
    for (var n:int=spn-1;n>=0;n--) speed+=speeds[n]; // sum all recorded speeds 
    myChannel1.soundTransform = myTransform1; 
    myTransform1.volume = speed/spn; // and now average it 
} 
+0

太棒了。完美的作品......謝謝。 – Dan434 2013-03-13 17:08:45