Phaser Node.js |
var express = require('express'); //
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http); // socket.IO
var port = process.env.PORT || 3000; //
var players = {}; //
/* , */
io.on("connection", function(socket) {
console.log('an user connected ' + socket.id); // node.js ,
players[socket.id] = {
"x": Math.floor(Math.random(1) * 2000),
"y": Math.floor(Math.random(1) * 2000),
"live": true,
}; //
io.sockets.emit('add_player', JSON.stringify({
"id": socket.id,
"player": players[socket.id]
})); //
socket.emit('add_players', JSON.stringify(players));// ( )
socket.on('player_rotation', function(data) {
io.sockets.emit('player_rotation_update', JSON.stringify({
"id": socket.id,
"value": data
}));
}); //
socket.on('player_move', function(data) {
data = JSON.parse(data); //
data.x = 0; // x ,
data.y = 0; // , y
/* */
switch (data.character) {
case "W":
data.y = -5;
players[data.id].y -= 5;
break;
case "S":
data.y = 5;
players[data.id].y += 5;
break;
case "A":
data.x = -5;
players[data.id].x -= 5;
break;
case "D":
data.x = 5;
players[data.id].x += 5;
break;
}
io.sockets.emit('player_position_update', JSON.stringify(data)); //
});
socket.on('shots_fired', function(id) { // id
io.sockets.emit("player_fire_add", id); //
});
socket.on('player_killed', function (victimId) { //
io.sockets.emit('clean_dead_player', victimId); //
players[victimId].live = false; //
io.sockets.connected[victimId].emit('gameOver', 'Game Over'); //
});
socket.on('disconnect', function() { //
console.log("an user disconnected " + socket.id);
delete players[socket.id];
io.sockets.emit('player_disconnect', socket.id);
});
});
app.use("/", express.static(__dirname + "/public")); //
app.get("/", function(req, res) {
res.sendFile(__dirname + "/public/index.html"); //
});
http.listen(port, function() {
console.log('listening on *:' + port); //
});
var width = window.innerWidth; //
var height = window.innerHeight; //
var game = new Phaser.Game(width, height, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render }); // ;
/* */
var player;
var socket, players = {};
var map;
var map_size = 2000; //
var style = { font: "80px Arial", fill: "white" }; // "Game Over"
var text;
var bullets;
var fireRate = 100;
var nextFire = 0;
var balls;
var ball;
var player_speed = 400; //
var live;
var moveBullets;
/* */
function preload() {
game.load.image('unit', 'img/unit.png');
game.load.image('bullet', 'img/bullet.png');
game.load.image('killer', 'img/killers.png');
game.load.image('map', 'img/grid.png');
}
function create() {
socket = io.connect(window.location.host); //
game.physics.startSystem(Phaser.Physics.ARCADE);
game.time.advancedTiming = true;
game.time.desiredFps = 60;
game.time.slowMotion = 0;
bg = game.add.tileSprite(0, 0, map_size, map_size, 'map'); //
game.world.setBounds(0, 0, map_size, map_size); //
game.stage.backgroundColor = "#242424"; //
socket.on("add_players", function(data) {
data = JSON.parse(data);
for (let playerId in data) {
if (players[playerId] == null && data[playerId].live) {
addPlayer(playerId, data[playerId].x, data[playerId].y, data[playerId].name);
}
}
live = true;
}); //
socket.on("add_player", function(data) {
data = JSON.parse(data);
if (data.player.live) {
addPlayer(data.id, data.player.x, data.player.y, data.player.name);
}
}); //
socket.on("player_rotation_update", function(data) {
data = JSON.parse(data);
players[data.id].player.rotation = data.value;
}); // ,
socket.on("player_position_update", function(data) {
data = JSON.parse(data);
players[socket.id].player.body.velocity.x = 0;
players[socket.id].player.body.velocity.y = 0;
players[data.id].player.x += data.x;
players[data.id].player.y += data.y;
}); //
socket.on('player_fire_add', function(id) {
players[id].weapon.fire();
}); //
game.input.onDown.add(function() {
socket.emit("shots_fired", socket.id);
}); //
socket.on('clean_dead_player', function(victimId) {
if (victimId == socket.id) {
live = false;
}
socket.on("gameOver", function(data){
text = game.add.text(width / 2, height / 2, data, { font: "32px Arial", fill: "#ffffff", align: "center" });
text.fixedToCamera = true;
text.anchor.setTo(.5, .5);
});
players[victimId].player.kill();
}); //
socket.on('player_disconnect', function(id) {
players[id].player.kill();
}); //
keybord = game.input.keyboard.createCursorKeys(); //
}
function update() {
if (live == true) {
players[socket.id].player.rotation = game.physics.arcade.angleToPointer(players[socket.id].player); //
socket.emit("player_rotation", players[socket.id].player.rotation); //
setCollisions(); //
characterController(); //
}
}
function bulletHitHandler(player, bullet) {
socket.emit("player_killed", player.id);
bullet.destroy(); // ,
} //
function setCollisions() {
for (let x in players) {
for (let y in players) {
if (x != y) {
game.physics.arcade.collide(players[x].weapon.bullets, players[y].player, bulletHitHandler, null, this);
}
}
}
} //
function sendPosition(character) {
socket.emit("player_move", JSON.stringify({
"id": socket.id,
"character": character
}));
} // ,
function characterController() {
if (game.input.keyboard.isDown(Phaser.Keyboard.A) || keybord.left.isDown) {
//players[socket.id].player.x -= 5;
sendPosition("A");
}
if (game.input.keyboard.isDown(Phaser.Keyboard.D) || keybord.right.isDown) {
//players[socket.id].player.x += 5;
sendPosition("D");
}
if (game.input.keyboard.isDown(Phaser.Keyboard.W) || keybord.up.isDown) {
//players[socket.id].player.y -= 5;
sendPosition("W");
}
if (game.input.keyboard.isDown(Phaser.Keyboard.S) || keybord.down.isDown) {
//players[socket.id].player.y += 5;
sendPosition("S");
}
} //
function render() {
game.debug.cameraInfo(game.camera, 32, 32);
}
function addPlayer(playerId, x, y) {
player = game.add.sprite(x, y, "unit");
game.physics.arcade.enable(player);
player.smoothed = false;
player.anchor.setTo(0.5, 0.5);
player.scale.set(.8);
player.body.collideWorldBounds = true; //
player.id = playerId;
let weapon = game.add.weapon(30, 'bullet'); //
weapon.bulletKillType = Phaser.Weapon.KILL_WORLD_BOUNDS;
weapon.bulletSpeed = 600; //
weapon.fireRate = 100;
weapon.trackSprite(player, 0, 0, true);
players[playerId] = { player, weapon };
game.camera.follow(players[socket.id].player, ); //
} // :)