nodejs 打造 多人對戰游戲服務器(初級入門)


enter image description here 使用socket.set 和 socket.get 在存取玩家信息

百牛信息技術bainiu.ltd整理發布於博客園

socket.get('playerinfo', function (err, player) { if(player == null) { console.log("[new player]",data.name); var player = new Player(socket, data); } else { console.log("[wait player visit again]",data.name); socket.emit('error', "you have registered"); return ; } socket.set('playerinfo', player, function () { usersWS.push(player); console.log("[wait player numer]",usersWS.length); //這在里如果玩家狀態和數量滿足要求就可以開始游戲了 Physic.CreatePhysicWorld(p1, p2); //通知client 啟動 游戲 ………….. }); //set }); //get }) //socket.on

轉發 和處理 玩家的輸入

 socket.on('sync', function (data) { socket.get('playerinfo', function (err, player) { if(player != null) { //var target = usersWS[i].socket; var room = player.room; for(var i=0;i<room.players.length;i++) { if(room.players[i].id ==player.id) { //console.log("this is msg from id:",room.players[i].id)  } else { room.players[i].socket.emit('sync', data); //console.log("send to id:",room.players[i].id) } //room.players[i].socket.emit('sync', data); } }//if else { socket.emit('error',"no session"); } }); //get }); //socket.on

}); //Network.on

定義一個簡單的玩家對象

function Player(socket, data) { var newplayer = { socket: socket, id: player_next_id++, tankType: 0, name: data.name, isMain: data.isMain, ip: socket.remoteAddress, status: '未准備',

// isAI: false, room: null }; newplayer.proto = Player.prototype; return newplayer; }

定義一個游戲房間對象

function Room(title) { var newroom = { id: room_next_id++, is_in_game: false, // 判斷改房間的游戲是否已經開始 players: [], map: 0, title: title, game: null }; room_list.push(newroom); newroom.__proto__ = Room.prototype; return newroom;

}

最后感言: 本人是新手,發篇文章互動一下實屬不易。不周之處,還望高手輕點兒拍磚。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM