Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当球触地时只发出一次声音_Javascript_Html_Audio - Fatal编程技术网

Javascript 当球触地时只发出一次声音

Javascript 当球触地时只发出一次声音,javascript,html,audio,Javascript,Html,Audio,我想在球第一次落地时播放声音,就这样。但即使球停在地上,它也会不断重放。我在循环函数中播放声音。我希望这样,当球静止在地面上时,声音就不会发出。我试着让球在x&y方向的速度为0时,停止声音,但它继续播放。我想这是因为它在一个循环中,但我想不出一个方法使它值得 function getMousePosition(e) { mouse.x = e.pageX - canvas.offsetLeft; mouse.y = e.pageY - canvas.offsetTop; } va

我想在球第一次落地时播放声音,就这样。但即使球停在地上,它也会不断重放。我在循环函数中播放声音。我希望这样,当球静止在地面上时,声音就不会发出。我试着让球在x&y方向的速度为0时,停止声音,但它继续播放。我想这是因为它在一个循环中,但我想不出一个方法使它值得

function getMousePosition(e) {
    mouse.x = e.pageX - canvas.offsetLeft;
    mouse.y = e.pageY - canvas.offsetTop;
}
var mouseDown = function(e) {
    if (e.which == 1) {
        getMousePosition(e);
        mouse.isDown = true;
        ball.position.x = mouse.x;
        ball.position.y = mouse.y;
    }
}
var mouseUp = function(e) { 
    if (e.which == 1) {
        mouse.isDown = false;
        ball.velocity.y = (ball.position.y - mouse.y) /10;
        ball.velocity.x = (ball.position.x - mouse.x) / 10;
    }
}

var setup = function() {
    canvas = document.getElementById("canvas");
    ctx = canvas.getContext("2d");
    
    canvas.onmousemove = getMousePosition;
    canvas.onmousedown = mouseDown;
    canvas.onmouseup = mouseUp;
    
    ctx.fillStyle = 'red';
    ctx.strokeStyle = '#000000';
    loopTimer = setInterval(loop, frameDelay);
}
var loop = function() {
    if ( ! mouse.isDown) {
        var Fx = -0.5 * Cd * A * rho * ball.velocity.x * ball.velocity.x * ball.velocity.x / Math.abs(ball.velocity.x);
        var Fy = -0.5 * Cd * A * rho * ball.velocity.y * ball.velocity.y * ball.velocity.y / Math.abs(ball.velocity.y);
        
        Fx = (isNaN(Fx) ? 0 : Fx);
        Fy = (isNaN(Fy) ? 0 : Fy);
        var ax = Fx / ball.mass;
        var ay = ag + (Fy / ball.mass);
        ball.velocity.x += ax*frameRate;
        ball.velocity.y += ay*frameRate;
        ball.position.x += ball.velocity.x*frameRate*100;
        ball.position.y += ball.velocity.y*frameRate*100;
    }
    if (ball.position.y > height - ball.radius){
        snd.play();
    }
    if (ball.velocity.x == 0 && ball.velocity.y == 0) {
        snd.pause();
    }
    if (ball.position.y > height - ball.radius) {
        ball.velocity.y *= ball.restitution;
        ball.position.y = height - ball.radius; 
    }
    if (ball.position.x > width - ball.radius) {
        ball.velocity.x *= ball.restitution;
        ball.position.x = width - ball.radius;
    }
    if (ball.position.x < ball.radius) {
        ball.velocity.x *= ball.restitution;
        ball.position.x = ball.radius;
    }
    ctx.clearRect(0,0,width,height);
    ctx.save();
    ctx.translate(ball.position.x, ball.position.y);
    ctx.beginPath();
    ctx.arc(0, 0, ball.radius, 0, Math.PI*2, true);
    ctx.fill();
    ctx.closePath();
    ctx.restore();
    ctx.fillStyle = "blue";
    ctx.font = "20px Arial";
    ctx.fillText(msg, 1300,20);

    if (mouse.isDown) {
        ctx.beginPath();
        ctx.moveTo(ball.position.x, ball.position.y);
        ctx.lineTo(mouse.x, mouse.y);
        ctx.stroke();
        ctx.closePath();
    }
    
}
setup();
</script>
函数getMousePosition(e){ mouse.x=e.pageX-canvas.offsetLeft; mouse.y=e.pageY-canvas.offsetTop; } var mouseDown=函数(e){ 如果(e.which==1){ 获取鼠标位置(e); mouse.isDown=true; ball.position.x=鼠标.x; ball.position.y=鼠标.y; } } var mouseUp=函数(e){ 如果(e.which==1){ mouse.isDown=false; ball.velocity.y=(ball.position.y-mouse.y)/10; ball.velocity.x=(ball.position.x-mouse.x)/10; } } var setup=function(){ canvas=document.getElementById(“canvas”); ctx=canvas.getContext(“2d”); canvas.onmousemove=getMousePosition; canvas.onmousedown=mouseDown; canvas.onmouseup=mouseUp; ctx.fillStyle='红色'; ctx.strokeStyle='#000000'; loopTimer=设置间隔(循环、帧延迟); } var循环=函数(){ 如果(!mouse.isDown){ var Fx=-0.5*Cd*A*rho*ball.velocity.x*ball.velocity.x*ball.velocity.x/Math.abs(ball.velocity.x); var Fy=-0.5*Cd*A*rho*ball.velocity.y*ball.velocity.y*ball.velocity.y/Math.abs(ball.velocity.y); Fx=(isNaN(Fx)?0:Fx); Fy=(伊斯南(Fy)?0:Fy); var ax=Fx/球质量; var ay=ag+(Fy/球质量); ball.velocity.x+=ax*帧速率; ball.velocity.y+=ay*帧速率; ball.position.x+=ball.velocity.x*帧率*100; ball.position.y+=ball.velocity.y*帧率*100; } if(球位置y>高度-球半径){ snd.play(); } if(ball.velocity.x==0&&ball.velocity.y==0){ 暂停(); } if(球位置y>高度-球半径){ ball.velocity.y*=ball.restoration; ball.position.y=高度-ball.radius; } if(球位置x>宽度-球半径){ ball.velocity.x*=ball.restoration; ball.position.x=宽度-ball.radius; } if(球位置x<球半径){ ball.velocity.x*=ball.restoration; ball.position.x=ball.radius; } ctx.clearRect(0,0,宽度,高度); ctx.save(); 平移(ball.position.x,ball.position.y); ctx.beginPath(); 弧(0,0,ball.radius,0,Math.PI*2,真); ctx.fill(); ctx.closePath(); ctx.restore(); ctx.fillStyle=“蓝色”; ctx.font=“20px Arial”; ctx.fillText(msg,1300,20); if(mouse.isDown){ ctx.beginPath(); ctx.moveTo(球位置x,球位置y); ctx.lineTo(mouse.x,mouse.y); ctx.stroke(); ctx.closePath(); } } 设置();