Возникли проблемы с передачей 2 массивов клиенту.У меня есть 2 объекта, и все экземпляры создаются на стороне сервера.Socket.emit взят из того, что я понял, сделано на сервере 25s / s и для каждого сокета, которые существуют.Теперь я создал пули на каждом корабле и хочу передать их клиенту.То, что вызывает у меня головную боль, так это то, что я жду на стороне Клиента с socket.on на корабль, который составляет 1: 1 на каждый испущенный сокет от сервера.А теперь по 1: n на каждый сокет на сервере, который стреляет пулями.Могу ли я на самом деле испускать 2 массива с 2 выпусками выполнения или нужно ли ohne излучать из каждого сокета со всеми данными в одном массиве?Моя проблема в том, что пуля массива не существует на стороне клиента!
Так что мои значения корабля находятся на стороне клиента, так или иначе, у меня нет массива пули на стороне клиента, я протестировал его с ничьей в фиксированном хи у
for (var i in bullet){
ctx.fillText("X",100,100);
}
но клиент ничего не рисует, значит у меня нет массива на стороне клиента.Также сделал предупреждение, если у меня будет более 10 пуль, но даже эта не всплывает
Ценю любую помощь
App.js
for(var q in SOCKET_LIST){
var socket = SOCKET_LIST[q];
var f =0;
for(var k = 0;k<allbullets.length;k++)
{
if (allbullets[k].user_id === q)
{
packbul= {
x:allbullets[k].xtype.x,
y:allbullets[k].xtype.y,
userid:allbullets[k].user_id,
}// array end
}
f++;
} //end for
socket.broadcast.emit('newBullet',packbul);
if (allobjects[q] === undefined)
{
}
else{
console.log("q:"+q);
pack[q] = {
x:allobjects[q].xtype.x,
y:allobjects[q].xtype.y,
userid:q,
}// array end
socket.broadcast.emit('newClientship',pack[q]);
} // else end
} // For ebf.
},1000/25); // Set Interval End
Клиент
var ship = Array();
var bullet = Array();
socket.on('newClientship',function(data){
ship[data.userid]= data;
});
socket.on('newBullet',function(data){
bullet= data;
});
var previous; // var for renderworld
renderWorld = function(timestamp){
//setInterval(function(){
if (!previous) previous = timestamp;
elapsed = timestamp - previous;
updateFps();
ctx.font="150px Arial";
ctx.fillStyle = "white";
ctx.clearRect(0,0,canvas.width,canvas.height);
for ( var i in ship){ ctx.fillText(ship[i].userid,ship[i].x,ship[i].y);
}
if (bullet.length > 10)
{
alert("ted");
}
for (var i in bullet){
ctx.fillText("X",100,100);
}
drawFps(200,20) ;
previous = timestamp;
window.requestAnimationFrame(renderWorld);
//},1000/25);
}
Только что обнаружил, что цикл for на стороне сервера не работает
Это дает мне «неопределенное», если я console.log (allbullets.length)
Если я делаю console.log (allbullets), он показывает, что он существует.
Bulletobj {
user_id: 47,
type: 'Bullet',
radius: 2,
basespeed: 1,
speed: 1,
velX: 0.2979165941720021,
velY: 0.9545919038609927,
targetX: 863,
targetY: 2429,
xtype: Obj { x: 153, y: 154, radius: 3, selected: 0 },
angleDeg: 1.268286927738952,
realAngle: 72.66748817105554 }
Теперь нашел формулу для подсчета предметов объекта
console.log("length:"+Object.keys(allbullets).length);
Но даже этоучитывает только предметы в одном из объектов и всегда показывает 12
Я хотел бы получить количество всех пуль, имеющих экземпляр
К вашему сведению На моем корабле есть процедура, которая создает новую пулю
ClientObj.prototype.fire =function (x,y){
allbullets = new Bulletobj(this.xtype.x,this.xtype.y,x,y,1,1, this.user_id);
}
// поместили эту переменную вне внешних функций для глобальных
allbullets = Array();