Javascript 从循环启动函数,但仅启动一次
好的,我正在为一个4人在线游戏制作一个大厅功能。一切都安排好了,当所有4名玩家加入大厅时,我想开始10秒的倒计时,让玩家点击客户端接受配对。(灵感来自csgo) 我使用ajax调用并刷新php文件中的大厅数据,这样就可以显示大厅中的实时统计信息。 这是一个循环,问题就出现了。我希望在所有4名玩家都加入时调用倒计时函数,如果一名玩家离开,则立即停止倒计时,但当父函数进入循环时(使用javascript中的set interval),它也会重复调用倒计时函数。 尝试过这个,但没有帮助Javascript 从循环启动函数,但仅启动一次,javascript,php,ajax,loops,Javascript,Php,Ajax,Loops,好的,我正在为一个4人在线游戏制作一个大厅功能。一切都安排好了,当所有4名玩家加入大厅时,我想开始10秒的倒计时,让玩家点击客户端接受配对。(灵感来自csgo) 我使用ajax调用并刷新php文件中的大厅数据,这样就可以显示大厅中的实时统计信息。 这是一个循环,问题就出现了。我希望在所有4名玩家都加入时调用倒计时函数,如果一名玩家离开,则立即停止倒计时,但当父函数进入循环时(使用javascript中的set interval),它也会重复调用倒计时函数。 尝试过这个,但没有帮助 functio
function loadlobbymodule(x){
var spl = x.split(",");
var lid = spl[1];
$.ajax({
url: 'inc/fn/lobbyload.php?lid='+ lid,
success: function(data) {
var spl = data.split(",");
var p1 = spl[0];
var p2 = spl[1];
var p3 = spl[2];
var p4 = spl[3];
var pl = spl[4];
var pleft = 4 - pl;
var p1_i = spl[5];
var p2_i = spl[6];
var p3_i = spl[7];
var p4_i = spl[8];
if(p1!=''){
$('#slot1').html('<img src="../../img/' + p1_i +'" width="100px" height="100px"><Br><br>' + p1);
} else{
$('#slot1').html('');
}
if(p2!=''){
$('#slot2').html('<img src="../../img/' + p2_i +'" width="100px" height="100px"><Br><br>' + p2);
}else{
$('#slot2').html('');
}
if(p3!=''){
$('#slot3').html('<img src="../../img/' + p3_i +'" width="100px" height="100px"><Br><br>' + p3);
}else{
$('#slot3').html('');
}
if(p4!=''){
$('#slot4').html('<img src="../../img/' + p4_i +'" width="100px" height="100px"><br><br>' + p4);
}else{
$('#slot4').html('');
}
$('#slotl').html(pleft + ' players left to join.');
if(pl == 4){
var accept = 1;
} else{
var accept = 0;
}
//alert(accept + ' sent');
accepto(accept);
}
});
}
function accepto(x){
//alert(x + ' reached');
if (x == 1){
if (!timeleft){
timeleft = 10;
var downloadTimer = setInterval(function(){
timeleft--;
$('.h3').html('All players joined. Accept in ' + timeleft + ' seconds');
if(timeleft <= 0)
clearInterval(downloadTimer);
},1000);
}
} else {
$('.h3').html('Waiting for players to join');
}
}setInterval(function(){loadlobbymodule(loll)}, 500);
函数loadlobbymodule(x){
var spl=x.split(“,”);
var lid=spl[1];
$.ajax({
url:'inc/fn/lobbyload.php?lid='+lid,
成功:功能(数据){
var spl=data.split(“,”);
变量p1=spl[0];
var p2=spl[1];
var p3=spl[2];
var p4=spl[3];
var pl=spl[4];
var-pleft=4-pl;
var p1_i=spl[5];
var p2_i=spl[6];
var p3_i=spl[7];
var p4_i=spl[8];
如果(p1!=''){
$('#slot1').html('
'+p1);
}否则{
$('#slot1').html('');
}
如果(p2!=''){
$('#slot2').html('
'+p2);
}否则{
$('#slot2').html('');
}
如果(p3!=''){
$('#slot3').html('
'+p3);
}否则{
$('#slot3').html('');
}
如果(p4!=''){
$('#slot4').html('
'+p4);
}否则{
$('#slot4').html('');
}
$('slotl').html(pleft+'players left to join');
如果(pl==4){
var=1;
}否则{
var=0;
}
//警报(接受+‘已发送’);
接受(接受);
}
});
}
函数接受器(x){
//警报(x+‘已到达’);
如果(x==1){
如果(!timeleft){
时间间隔=10;
var downloadTimer=setInterval(函数(){
时间限制--;
$('.h3').html('所有玩家加入。在'+timeleft+'秒'内接受');
如果(timeleft将计时器设置为全局,并不断检查活动玩家
window.myGlobalTimer = yourTimer()
listening_PlayerThatLeave : ()=>{
clearTimeout(myGlobalTimer)
}
listening_AllPlayersIn : ()=>{
window.myGlobalTimer
}
/* dont keep making a new timeOut everytime , instead use the global var*/
function accepto(x){
//alert(x + ' reached');
if (x == 1){
if (!timeleft){
timeleft = 10;
//here
var downloadTimer = setInterval(function(){
timeleft--;
$('.h3').html('All players joined. Accept in ' + timeleft + ' seconds');
if(timeleft <= 0)
clearInterval(downloadTimer);
},1000);
}
} else {
$('.h3').html('Waiting for players to join');
}
}
window.myGlobalTimer=yourTimer()
正在收听播放者离开:()=>{
clearTimeout(myGlobalTimer)
}
倾听所有玩家的声音:()=>{
window.myGlobalTimer
}
/*不要每次都保持新的超时,而是使用全局变量*/
函数接受器(x){
//警报(x+‘已到达’);
如果(x==1){
如果(!timeleft){
时间间隔=10;
//这里
var downloadTimer=setInterval(函数(){
时间限制--;
$('.h3').html('所有玩家加入。在'+timeleft+'秒'内接受');
如果(timeleft)嘿,抱歉这么晚才检查,你能教我如何将其集成到我的代码中吗??