0

node & socketi IO を使用して、単純なマルチプレイヤー ゲームを作成しています。新しいクライアントが参加すると、各クライアントの socket.id である ID を持つ新しい HTML 要素を作成します。

クライアントはモバイル デバイスであり、移動するときに「deviceorientation」値を送信して、各クライアントが HTML 要素の 1 つを制御できるようにします。ただし、私は何か間違ったことをしていますが、それは完全には理解できません。すべてのクライアントが、独自のソケット ID で HTML 要素を制御するのではなく、最新の HTML 要素を制御するために戦うためです。

サーバー上:

servio.on('connection', function (socket) {

    servio.sockets.emit('newplayer',socket.id);

    socket.on('move', function(data) {
        socket.broadcast.emit('clientmove', data);
        console.log(data.myid);
    });

});

クライアントで:

iosocket.on('newplayer', function(data) {
            myid    =   data;
            $('body').append('<div class="dot _jsDot" id="'+myid+'"></div>');
        });

window.addEventListener("deviceorientation", handleOrientation, true);

        function handleOrientation(event) {
            var absolute = event.absolute;
            var alpha    = event.alpha;
            var beta     = event.beta;
            var gamma    = event.gamma;

            vals = {
                betaVal     : beta,
                gammaVal    : gamma,
                myid        : myid
            }

            iosocket.emit('move', vals);
        }

        iosocket.on('clientmove', function(data) {

            var x = Math.round(data.gammaVal)*3;
            var y = Math.round(data.betaVal)*3;

            $('#'+data.myid+'').css({'left':x + $(window).outerWidth()/2});
            $('#'+data.myid+'').css({'top':y + $(window).outerHeight()/2});

        });

根本的な混乱ではなく、小さな何かを見落としていることを願っています。ノードとソケット io の経験が豊富な人がアドバイスを提供できれば、それは素晴らしいことです。

4

1 に答える 1

0

myid全員の ID を新しいプレーヤーの ID に更新しています。2つを区別することをお勧めします。

サーバー上で次のようにします。

everyone.push(socket.id); // global array of all player ids
socket.emit('init',[socket.id,everyone]);
servio.sockets.emit('newplayer',socket.id);

クライアントで次のようにします。

socket.on('newplayer', function(data) {
    myid = data.id;
    create_div_with(data.id);
    create_everyone_else(data.everyone);
});
socket.on('newplayer', function(id) {
    create_div_with(id);
});
于 2013-10-27T21:24:58.557 に答える