মাল্টিপ্লেয়ার এইচটিএমএল 5, নোড.জেএস, সকেট.আইও [বন্ধ]


13

আমি এইচটিএমএল 5 ক্যানভাস, জাভাস্ক্রিপ্ট (জন রেসিগ সাধারণ উত্তরাধিকার পাঠাগার ব্যবহার করে) এবং সকেট.আইও সহ নোড.জেএস সহ সাধারণ মাল্টি প্লেয়ার তৈরি করার চেষ্টা করছি। আমার ক্লায়েন্ট কোড:

var ক্যানভাস = ডকুমেন্ট.সেটমেন্ট বিইআইডি ('গেম');
var প্রসঙ্গ = canvas.getContext ('2 ডি');
var সকেট = নতুন io.Sket ('127.0.0.1', {পোর্ট: 8080});

var প্লেয়ার = নাল;

var UP = 'UP',
    LEFT = 'LEFT',
    ডাউন = 'ডাউন',
    অধিকার = 'অধিকার';

socket.connect ();

socket.on ('সংযুক্ত', ফাংশন () {socket.send ();
    console.log ( 'তে সংযুক্ত!');
    প্লেয়ার = নতুন প্লেয়ার (50, 50);
});

সকেট.অন ('বার্তা', ফাংশন (msg) {
    যদি (msg == 'ইউপি') {
        player.moveUP ();
    } অন্যথায় যদি (msg == 'বাম') {
        player.moveLEFT ();
    } অন্যথায় যদি (msg == 'ডাউন') {
        player.moveDOWN ();
    } অন্যথায় যদি (msg == 'সঠিক') {
        player.moveRIGHT ();
    } অন্য {

    }
});

socket.on ('সংযোগ বিচ্ছিন্ন', ফাংশন () {
    console.log ( 'সংযোগ বিচ্ছিন্ন!');
});

var প্লেয়ার = Class.extend ({
    init: ফাংশন (x, y) {
        this.x = x;
        this.y = y;
    },
    সেটএক্স: ফাংশন (এক্স) {
        this.x = x;
    },
    getX: ফাংশন () {
        এটিকে ফেরত দিন
    },
    setY: ফাংশন (y) {
        this.y = y;
    },
    getY: ফাংশন () {
        এটিকে ফিরিয়ে দিন
    },
    অঙ্কন: ফাংশন () {
        কনটেক্সট.ক্রিয়ারেক্ট (0, 0, 350, 150);
        প্রসঙ্গ.ফিলআরেক্ট (এটি.এক্স, এইটি, ১৫, ১৫);
    },
    সরান: ফাংশন () {
        this.x + = 1;
        this.y + = 1;
    },
    মুভআপ: ফাংশন () {
        this.y--;
    },
    মুভলেফ্ট: ফাংশন () {
        this.x--;
    },
    সরানোডাউন: ফাংশন () {
        this.y ++,;
    },
    সরানরাইট: ফাংশন () {
        this.x ++,;
    }
});

ফাংশন চেককি কোড (ইভেন্ট) {
    var কীকোড;
    যদি (ইভেন্ট == নাল) {
        কীকোড = উইন্ডো.ইভেন্ট.কি কোড;
    } অন্য {
        কীকোড = ইভেন্ট.কি কোড;
    }

    স্যুইচ (কী কোড) {
        কেস 38: // ইউপি
            player.moveUP ();
            socket.send (ইউপি);
        বিরতি;
        কেস 37: // লেফট
            player.moveLEFT ();
            socket.send (বাম);
        বিরতি;
        কেস 40: // ডাউন
            player.moveDOWN ();
            socket.send (নিচে);
        বিরতি;
        কেস 39: // সঠিক
            player.moveRIGHT ();
            socket.send (ডান);
        বিরতি;
        ডিফল্ট:
        বিরতি;

    }

}

ফাংশন আপডেট () {
    player.draw ();
}

var FPS = 30;
সেটইন্টারভাল (ফাংশন () {
    হালনাগাদ();
    player.draw ();
}, 1000 / এফপিএস);

ফাংশন init () {
    ডকুমেন্ট.অনকিডাউন = চেককি কোড;
}

এটা();

এবং সার্ভার কোড:

var http = প্রয়োজনীয় ('http'),
    io = প্রয়োজনীয় ('সকেট.আইও'),
    বাফার = নতুন অ্যারে (),

সার্ভার = http.createServer (ফাংশন (req, res) {
    res.writHead (200, Content 'বিষয়বস্তুর ধরণ': 'পাঠ্য / এইচটিএমএল'});
    res.end ( '

ওহে বিশ্ব

'); }); server.listen (8080); var সকেট = io.listen (সার্ভার); socket.on ('সংযোগ', ফাংশন (ক্লায়েন্ট) { ক্লায়েন্ট.অন ('বার্তা', ফাংশন (বার্তা) { console.log (বার্তা); client.broadcast (বার্তা); }) client.on ('সংযোগ বিচ্ছিন্ন', ফাংশন () { }) });

এবং আমি যখন প্রথম ক্লায়েন্টের সাথে দুটি ক্লায়েন্টের আই চালাচ্ছি তখন দ্বিতীয় ক্লায়েন্ট রেক্টে এবং দ্বিতীয় ক্লায়েন্টের সাথে প্রথম ক্লায়েন্ট রেক্টরে এবং তৃতীয় ক্লায়েন্টের মতো কিছু প্রথম এবং দ্বিতীয় ক্লায়েন্ট রেক্টরের স্থানান্তর করতে পারে।

আমার প্রশ্ন আছে কীভাবে বাস্তব মাল্টি প্লেয়ার তৈরি করবেন? এর মতো কিছু: তিনটি ক্লায়েন্টের এবং প্রথম ক্লায়েন্টটি রেকট 1, দ্বিতীয় রেকটি 2 এবং শেষ রেকটি 3 পান। প্রথম ক্লায়েন্ট কেবল রেকট 1 স্থানান্তর করতে পারে, ক্লায়েন্ট তৃতীয় কেবলমাত্র রেকটি 3 স্থানান্তর করতে পারে।

কারও ধারণা থাকতে পারে? আমি গুগলে অনুসন্ধান করি কিন্তু উত্তর খুঁজে পাই না।

আমার ইংরেজি ভাষার জন্য দুঃখিত, ধন্যবাদ।

উত্তর:


15

আমি ক্লায়েন্ট / সার্ভার মডেলের উপর ভিত্তি করে এইচটিএমএল 5 রিয়েলটাইম মাল্টিপ্লেয়ার গেমস তৈরির জন্য বিশেষত একটি কাঠামো তৈরি করেছি। এই মডেলটিতে প্লেয়াররা সার্ভারে কেবল ইনপুট পাঠায় (কীগুলি টিপে দেওয়া হচ্ছে) - এবং সার্ভারে গেমটি ঘটে।

সার্ভারটি সমস্ত ক্লায়েন্টকে সময়োচিত ওয়ার্ল্ড-স্ন্যাপশট প্রেরণ করে এবং ক্লায়েন্টরা নিজেদের রেন্ডারটাইমের ফাঁকে ফাঁকে দুটি পরিচিত ওয়ার্ল্ড আপডেট খুঁজে পেয়ে বর্তমান সময় থেকে 75 এমএস সময় মতো বলে থাকে।

সংগ্রহস্থল (3 টি ডেমো থাকে) https://github.com/onedayitwillmake/ রিয়েলটাইম মাল্টিপ্লেয়ার নোডজেস

ভিডিও বক্স 2 ডি ডেমো ক্রিয়াতে:
http://vimeo.com/24149718

জেএসকনফ ২০১১ থেকে স্লাইডস: http://www.slideshare.net/MarioGonzalez15/realtime-html5- মাল্টিপ্লেয়ারগেমসবিথনোডেজেস-7868336

এটা তোলে Quakeworld এবং ভালভ এর উত্স ইঞ্জিন whitepapers উপর ভিত্তি করে এর:
http://fabiensanglard.net/quakeSource/index.php http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking


এই ফ্রেমওয়ার্কের জন্য অভিনন্দন!
মিঃ যোশিজি

হ্যাঁ আমি কীভাবে আমার গেমটি চালানোর পরিকল্পনা করি, তা কেবল ইনপুটটি প্রেরণে বোঝায়!
নিকোস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.