【发布时间】:2021-08-26 17:39:03
【问题描述】:
let tick = (z)=>{
tokens[z].l.soilders.spearman.state+=0.75
tokens[z].l.soilders.swordman.state+=0.50
tokens[z].l.soilders.archer.state+=0.25
tokens[z].l.soilders.halberdier.state+=0.30
tokens[z].r.soilders.spearman.state+=0.75
tokens[z].r.soilders.swordman.state+=0.50
tokens[z].r.soilders.axeman.state+=0.20
tokens[z].r.soilders.halberdier.state+=0.25
io.emit("res",{
err:false,
errno:false,
op:"start",
data:tokens[z]
})
console.log("ticked, data sending");}
这个函数调用 setInterval 之类的东西,并给了我很多 console.log("ticked, data sent") 输出 所以,io.emit 正在工作
但是,一旦收到,客户端就不会收到 io.emit 发送的数据
下面是客户端代码
通常它应该记录从底部或第 2 行开始的第 8 行
但记录一次
服务器一直在发送
控制台没有错误
socket.on("res",e=>{
console.log("data received",e);
if(e.err){
switch(e.errno){
case 1:{
alert("geçersiz turnuva jetonu")
}break
case 2:{
alert("azami oyuncu sayısı")
}break
case 3:{
alert("aynı oyuncu")
}break
case 4:{
alert("oyuncu bulunamadı")
document.getElementById("ready").disabled=false
}break
case 5:{
alert("zaten hazırsın")
}break
case 6:{
alert("geçersiz müdahale")
document.getElementById("ready").disabled=false
}break
default:{
console.log("bilinmeyen hata kodu");
}
}
}else{
switch(e.op){
case "init":{
right = Object.keys(e.data.r.soilders)
left = Object.keys(e.data.l.soilders)
for(let i=1;i<=right.length;i++){
div1 = document.createElement("div")
canvas = document.createElement("canvas")
div1.setAttribute("style",`box-sizing: border-box;
height: 100%;
float: ${"right"};
aspect-ratio: 1/1;
margin-right: -2%;`)
canvas.setAttribute("style",`aspect-ratio: 1/1;
height: 100%;
position: absolute;`)
canvas.setAttribute("id","rsoilders"+i)
canvas.setAttribute("width","100%")
canvas.setAttribute("height","100%")
div1.appendChild(canvas)
document.getElementById("right").appendChild(div1)
}
for(let i=1;i<=left.length;i++){
div1 = document.createElement("div")
canvas = document.createElement("canvas")
div1.setAttribute("style",`box-sizing: border-box;
height: 100%;
float: ${"left"};
aspect-ratio: 1/1;
margin-right: -2%;`)
canvas.setAttribute("style",`aspect-ratio: 1/1;
height: 100%;
position: absolute;`)
canvas.setAttribute("id","lsoilders"+i)
canvas.setAttribute("width","100%")
canvas.setAttribute("height","100%")
div1.appendChild(canvas)
document.getElementById("left").appendChild(div1)
}
if(e.data.l.clientId==socket.id){
//add mouse events
}else if(e.data.r.clientId==socket.id){
//add mouse events
}
}break
case "start":{
console.log(e,"x");
}break
default:{
alert("server crash")
}
}
}
})
【问题讨论】:
-
你需要显示调用 tick 的位置
标签: javascript node.js socket.io