Как осуществить съемку и столкновение - PullRequest
0 голосов
/ 23 февраля 2019

Я ищу решение, как я могу реализовать стрельбу в своей игре.Я бы хотел, чтобы стрельба по направлению мыши синхронизировалась с другими игроками, а когда пуля сталкивается с другим игроком, он умирает и возрождается.Вот мой код: Server.js

    var express = require('express'),
    app = express(),
    http = require('http').createServer(app),
    io = require('socket.io').listen(http);

    http.listen(process.env.PORT || 3000);
    console.log('Serwer wystartował na porcie: 3000');

//obsługa połączeń
app.use(express.static(__dirname + '/client'));

var gracze = [];

//funkcja tworząca graczy
function nowyGracz() {
    this.nazwa;
    this.id = 1;
    this.x = Math.random() * 500;
    this.y =  Math.random() * 500;
    //losowe kolory
    var r = Math.random()*255>>0;
    var g = Math.random()*255>>0;
    var b = Math.random()*255>>0;
    this.kolor = "rgba(" + r + ", " + g + ", " + b + ", 0.5)";

    this.promien = 30;
    this.predkosc =  2;

    return {'nazwa' : this.nazwa,"x" : this.x,"y" : this.y,"kolor" : this.kolor, "promien" : this.promien,"predkosc" : this.predkosc}
}


//połączenie do serwera i obsluga polaczen kazdego nowego gracza
io.sockets.on('connection', function(socket){
    var gracz = new nowyGracz(); //nowy gracz
    gracze.push(gracz); //wrzuc gracza do tablicy

    //tablica z graczami
    socket.broadcast.emit('currentUsers', gracze);
    socket.emit('welcome', gracz, gracze);

        //rozłączono
    socket.on('disconnect', function(){
        gracze.splice(gracze.indexOf(gracz), 1);
        console.log(gracze);
        socket.broadcast.emit('graczWyszedl', gracze);
    });

    socket.on('wcisniety', function(przycisk){
        if(przycisk === 38 || przycisk === 87){
            gracz.y -= gracz.predkosc;
            socket.emit('PlayersMoving', gracze);
            socket.broadcast.emit('PlayersMoving', gracze);
        } 
        if(przycisk === 40 || przycisk === 83){
            gracz.y += gracz.predkosc;
            socket.emit('PlayersMoving', gracze);
            socket.broadcast.emit('PlayersMoving', gracze);
        } 
        if(przycisk === 37 || przycisk === 65){
            gracz.x -= gracz.predkosc;
            socket.emit('PlayersMoving', gracze);
            socket.broadcast.emit('PlayersMoving', gracze);
        } 
        if(przycisk === 39 || przycisk === 68){
            gracz.x += gracz.predkosc;
            socket.emit('PlayersMoving', gracze);
            socket.broadcast.emit('PlayersMoving', gracze);
        }
    });
});

Когда игрок присоединяется, он появляется на экране и т. Д. Но я понятия не имею, как реализовать съемку.Надеюсь на помощь.:)

1 Ответ

0 голосов
/ 24 февраля 2019

Чтобы построить многопользовательскую онлайн-игру (особенно массовую многопользовательскую онлайн-игру с быстрой скоростью, такую ​​как PUBG), мы должны «рассчитать» столкновение между пулями и игроками, как на стороне клиента, так и на сервере.боковая сторона.

Чтобы сделать это на стороне клиента, вам понадобится «физический движок» на стороне клиента. Если вы используете HTML5 для создания своей игры, вы можете попробовать игровой движок Phaser.js.Из-за сетевых и других проблем игрок A может подумать, что он убил игрока B, но игрок B может подумать, что пуля не попала, мы обычно справляемся с этим, используя технику «Выравнивание кадров».

Чтобы выполнить расчетна стороне сервера обычно требуется написать собственный физический движок, пользователь отправляет «действия» на сервер, сервер рассчитывает положение каждого пользователя и каждого маркера, сервер определяет, какой пользователь умирает.Этот метод называется «Синхронизация состояний».

Это означает, что для создания игр MMS, выбора метода, который вы хотите использовать первым, я бы предложил использовать движок игры / физики и выполнить вычисления на стороне клиента, в противном случаеесли количество игроков будет расти, вам понадобится все больше и больше игровых серверов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...