Javascript 如何同时使用socket.io和express?
我的socket.io emit和express有问题。我想发送一些数据(我正在创建一个网络游戏),所以我需要将玩家数据发送到特定的大厅。例如,我在此链接处创建了一个大厅: localhost:8000/test/lobbyName 我只需要向这个大厅发送信息,不需要向其他大厅发送信息。我怎么能做到 这是我的代码: 万维网 main.jsJavascript 如何同时使用socket.io和express?,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我的socket.io emit和express有问题。我想发送一些数据(我正在创建一个网络游戏),所以我需要将玩家数据发送到特定的大厅。例如,我在此链接处创建了一个大厅: localhost:8000/test/lobbyName 我只需要向这个大厅发送信息,不需要向其他大厅发送信息。我怎么能做到 这是我的代码: 万维网 main.js let game = new Phaser.Game( { type: Phaser.AUTO, width: win
let game = new Phaser.Game(
{
type: Phaser.AUTO,
width: window.innerWidth,
height: window.innerHeight,
physics: {
default: 'arcade',
arcade: {
debug: false,
gravity: { y: 0 }
}
},
scene: {
preload: preload,
create: create,
update: update
}
});
let playerInfo = ['Daniel', 100, 100, 3, 12, 1000]; //nickname , gold, life , jump , spead , gravity
let player = new Player(game, playerInfo);
let background = new Background();
let settings = new Settings();
function preload () {
load(this);
loading(this);
settings.preload();
}
function create () {
let playerArray = [0, 0];
this.socket = io();
player.debug(this);
var self = this;
this.otherPlayers = this.physics.add.group();
this.socket.on('currentPlayers', function (players) {
Object.keys(players).forEach(function (id) {
if (players[id].playerId === self.socket.id) {
player.createPlayer(self, players[id]);
}else if(playerArray[0] == 0) {
playerArray[0] = players[id].playerId;
player.createEnemyOne(self, players[id]);
}else if(playerArray[1] == 0) {
playerArray[1] = players[id].playerId;
player.createEnemyTwo(self, players[id]);
}else {
playerArray[2] = players[id].playerId;
player.createEnemyTre(self, players[id]);
}
});
});
this.socket.on('newPlayer', function (playerInfo) {
if(playerArray[0] == 0) {
playerArray[0] = playerInfo.playerId;
player.createEnemyOne(self, playerInfo);
}else if(playerArray[1] == 0) {
playerArray[1] = playerInfo.playerId;
player.createEnemyTwo(self, playerInfo);
}else {
playerArray[2] = playerInfo.playerId;
player.createEnemyTre(self, playerInfo);
}
});
this.socket.on('disconnect', function (playerId) {
self.otherPlayers.getChildren().forEach(function (otherPlayer) {
if(playerId === otherPlayer.playerId) {
otherPlayer.destroy();
}
for(var i = 0; i < 2; i++) {
if(playerId == playerArray[i]) {
playerArray[i] = 0;
}
}
});
});
this.socket.on('playerMoved', function (playerInfo) {
if(playerArray[0] == playerInfo.playerId) {
move = playerInfo.layer - background.midle.x;
player.setPosition(player.enemy, player.gun1,player.textEn1, playerInfo.x - move, playerInfo.y * window.innerHeight, playerInfo.frame, player.haveGun1);
}else if(playerArray[1] == playerInfo.playerId) {
move = playerInfo.layer - background.midle.x;
player.setPosition(player.enemy2, player.gun2, player.textEn2, playerInfo.x - move, playerInfo.y * window.innerHeight, playerInfo.frame, player.haveGun2);
}else {
move = playerInfo.layer - background.midle.x;
player.setPosition(player.enemy3, player.gun3, player.textEn3, playerInfo.x - move, playerInfo.y * window.innerHeight, playerInfo.frame, player.haveGun3);
}
});
this.input.on('pointermove', function (pointer) {
if(player.haveGun) {
let angle = (Phaser.Math.Angle.Between(player.player.x , player.player.y, pointer.x , pointer.y)) * (180/Math.PI);
player.gun_angle(angle + 90);
}
});
this.socket.on('gunAngle', function (id, playerInfo) {
if(playerArray[0] == id) {
if(player.haveGun1) player.gunAngle(player.gun1, playerInfo.angle);
}else if(playerArray[1] == id) {
if(player.haveGun2) player.gunAngle(player.gun2, playerInfo.angle);
}else {
if(player.haveGun3) player.gunAngle(player.gun3, playerInfo.angle);
}
});
this.socket.on('shotting', function (id, playerInfo) {
if(playerArray[0] == id) {
player.shot(self.bulletsEnemy, player.enemy, playerInfo);
}else if(playerArray[1] == id) {
player.shot(self.bulletsEnemy2,player.enemy2, playerInfo);
}else {
player.shot(self.bulletsEnemy3,player.enemy3, playerInfo);
}
});
this.socket.on('newCoin', function (x) {
background.worldObject.createCoin(self, x, true);
});
this.socket.on('taken', function (x, y) {
background.worldObject.coin.destroy();
background.worldObject.createCoin(self, x, y);
});
this.socket.on('enemyGun', function (id, info, info2) {
if(playerArray[0] == id) {
player.enemyGun1(self, info, info2);
}else if(playerArray[1] == id) {
player.enemyGun2(self, info, info2);
}else {
player.enemyGun3(self, info, info2);
}
});
background.createBackground(this);
settings.create(this);
}
function loading(game) {
let progressBar = game.add.graphics();
let progressBox = game.add.graphics();
let width = 320, heigth = 50;
progressBox.fillStyle(0x222222, 0.8);
progressBox.fillRect(window.innerWidth / 2 - (width / 2), window.innerHeight / 2 - (heigth / 2), width, heigth);
let loadingText = game.make.text({
x: window.innerWidth / 2,
y: window.innerHeight / 2 - 50,
text: 'Loading...',
style: {
font: '20px monospace',
fill: '#ffffff'
}
});
let percentText = game.make.text({
x: window.innerWidth / 2,
y: window.innerHeight / 2 - 5,
text: '0%',
style: {
font: '18px monospace',
fill: '#ffffff'
}
});
let assetText = game.make.text({
x: window.innerWidth / 2 - 100,
y: window.innerHeight / 2 + 50,
text: '',
style: {
font: '18px monospace',
fill: '#ffffff'
}
});
percentText.setOrigin(0.5, 0.5);
loadingText.setOrigin(0.5, 0.5);
game.load.on('progress', function (value) {
progressBar.clear();
progressBar.fillStyle(0xffffff, 1);
progressBar.fillRect(window.innerWidth / 2 - ((width - 20) / 2), window.innerHeight / 2 - ((heigth - 20) / 2), 300 * value, heigth - 20);
percentText.setText(parseInt(value * 100) + '%');
});
game.load.on('fileprogress', function (file) {
console.log(file.key);
assetText.setText('Loading asset: ' + file.key);
});
game.load.on('complete', function () {
progressBar.destroy();
progressBox.destroy();
loadingText.destroy();
percentText.destroy();
assetText.destroy();
});
}
function load(game) {
let playerImg = ['/images/snowman.png', '/images/snowman.png', '/images/snowman.png', '/images/snowman.png'];
let sound = ['/sounds/Jump.mp3', '/sounds/Explosion.mp3', '/sounds/Pickup_Coin.mp3']
let groundImg = ['/images/ground.png','/images/nuvola.png', '/images/map.json', '/images/coin.png', '/images/heart.png', '/images/pozioni.png'];
game.load.spritesheet('player', playerImg[0], { frameWidth: 128, frameHeight: 128 });
game.load.spritesheet('enemy', playerImg[1], { frameWidth: 128, frameHeight: 128 });
game.load.spritesheet('enemy2', playerImg[2], { frameWidth: 128, frameHeight: 128 });
game.load.spritesheet('enemy3', playerImg[3], { frameWidth: 128, frameHeight: 128 });
game.load.audio('jumpAudio', sound[0]);
game.load.audio('shotAudio', sound[1]);
game.load.audio('coinAudio', sound[2]);
game.load.image("tiles1", groundImg[0]);
game.load.image("tiles2", groundImg[1]);
game.load.tilemapTiledJSON("map", groundImg[2]);
game.load.spritesheet("coin", groundImg[3], { frameWidth: 128, frameHeight: 128 });
game.load.spritesheet("heart", groundImg[4], { frameWidth: 128, frameHeight: 128 });
game.load.spritesheet("pozions", groundImg[5], { frameWidth: 32, frameHeight: 32 });
}
function update () {
if(player.life != false) player.update(this);
background.update(this);
background.midle.setCollisionByProperty({colision:true});
this.physics.add.collider(player.player, background.midle);
}
window.addEventListener('resize', function() {
game.scale.setGameSize( window.innerWidth, window.innerHeight);
background.midle.displayHeight = window.innerHeight;
player.resize();
settings.resize();
});
以下是表格:
提交
现在,如何使用socket.io将播放机数据仅发送到播放机连接的重定向页面
对不起,我的英语很差,谢谢你你应该使用
socket.io
房间
在套接字连接中,将套接字连接到特定房间,例如:lobbyName
,然后仅向该房间发射
io.to('lobbyName').emit(...)
名称空间
在后端,为每个大厅创建一个命名空间
const lobbies = ['/lobbyName'];
for(const lobby of lobbies) {
const nsp = io.of(lobby);
// Your socket logic in here
nsp.on('connection', socket => {
console.log('someone connected');
});
}
并连接到前端的特定命名空间:
const socket = io('/lobbyName');
您应该使用
socket.io
房间
在套接字连接中,将套接字连接到特定房间,例如:lobbyName
,然后仅向该房间发射
io.to('lobbyName').emit(...)
名称空间
在后端,为每个大厅创建一个命名空间
const lobbies = ['/lobbyName'];
for(const lobby of lobbies) {
const nsp = io.of(lobby);
// Your socket logic in here
nsp.on('connection', socket => {
console.log('someone connected');
});
}
并连接到前端的特定命名空间:
const socket = io('/lobbyName');
谢谢,我试试这个方法。我编辑了我的问题,你能帮我更多吗?你不应该在原始问题回答后编辑问题并添加额外的内容。总是为它创建一个新问题。好的,对不起,但我是新的。。。我提出了一个新问题,谢谢。谢谢,我试试这个方法。我编辑了我的问题,你能帮我更多吗?你不应该在原始问题回答后编辑问题并添加额外的内容。总是为它创建一个新问题。好的,对不起,但我是新的。。。我提出了一个新问题,谢谢。