একটি উন্নত জাভা গেমটিতে কী / মাউস ইনপুট রাখব?


9

আমি একজন স্ব-শিক্ষিত প্রোগ্রামার, তাই জিনিসগুলি করার সঠিক উপায়গুলি আমি জানি না। আমি গ্রহাণু এবং সাপের মতো সাধারণ গেম তৈরি করেছি তবে সেই গেমগুলিতে আপনি কীভেন্ট ফাংশনগুলির মধ্যে ভেরিয়েবলগুলি সহজেই সংশোধন করতে পারেন। আমি এখানে আমার সাধারণ গ্রহাণু গেমটিতে এটি কীভাবে করেছি:

/*
* key listener events
*/
public void keyReleased(KeyEvent k){
    int keyCode = k.getKeyCode();

    switch(keyCode){

        case KeyEvent.VK_LEFT:
            turnLeft = false;
            break;

        case KeyEvent.VK_RIGHT:
            turnRight = false;
            break;

        case KeyEvent.VK_UP:
            accel = false;
            break;

        case KeyEvent.VK_1:
            cls = true;
            break;
        case KeyEvent.VK_ENTER:
            break;
        case KeyEvent.VK_SPACE:
            fire = false;
    }
}
public void keyTyped(KeyEvent K){}
public void keyPressed(KeyEvent k){
    int keyCode = k.getKeyCode();

    switch(keyCode){

        case KeyEvent.VK_LEFT:
            turnLeft = true;
            break;

        case KeyEvent.VK_RIGHT:
            turnRight = true;
            break;

        case KeyEvent.VK_UP:
            accel = true;
            break;

        case KeyEvent.VK_1:
            cls = false;
            break;
        case KeyEvent.VK_ENTER:
            clearAllBullets();
            break;
        case KeyEvent.VK_SPACE:
            fire = true;
    }
}

যদি আমি আরও উন্নত গেমটি করতে পারি (একটি মূল মেনু, বিকল্পগুলি, মূল খেলা ইত্যাদি), কী কী / মাউস ইনপুটটি করব?

এছাড়াও, আমি যদি একক প্লেয়ারে যেতে চাই তবে আমি কি সমস্ত গেমপ্লে কোডকে একটি শ্রেণিতে রেখেছি? একক প্লেয়ার কোডকে একটি পৃথক শ্রেণিতে রাখার কী উপায় আছে এবং কী কী কী ইনপুটটিতে এখনও ভেরিয়েবলগুলি এবং এ জাতীয় পরিবর্তন করতে হবে?


+1 আপনার উত্তর আমাকে Bearcdp এর উত্তর থেকে নতুন কিছু শিখতে দেয়। জিজ্ঞাসা করার জন্য ধন্যবাদ! =)
মারকুইলার

উত্তর:


3

আমি কোনও বিশেষজ্ঞ নই এবং তবুও আমি নিয়ন্ত্রণ এবং ব্যবসায় / গেম / মেনু (এটির নাম দিন) যুক্তিকে উভয়ই পৃথক করার পরামর্শ দিই।

ক্লাস দিয়ে ডিজাইন করা একটি খেলায় একটি সাপকে দিকনির্দেশনা দেওয়ার ক্ষেত্রে ইতিমধ্যে আমি একই ধরণের প্রশ্নের উত্তর দিয়েছি। জাভা একটি অবজেক্ট ওরিয়েন্টেড ভাষা হওয়ায় আমি অনুমান করি আপনি পর্যাপ্ত ক্লাস এবং স্টাফ লিখতে পারছেন। তারপরে, আপনি যখন নিজের অবজেক্ট ক্লাসটি লিখেছেন, যদি এটির কারণে যদি আপনার অবজেক্টটি কিছু কী এবং মাউস ক্লিকগুলিতে প্রতিক্রিয়া দেখাতে পারে তবে আমি একটি কন্ট্রোলার শ্রেণীর সাথে যাব যা বর্তমানে স্ক্রিনে প্রদর্শিত হচ্ছে তা জানে, তবে এই বস্তুকে বলুন এটি কী করা উচিত কীটি চাপানো হয়েছে বা যে অঞ্চলটি ক্লিক করা হয়েছে তার উপর নির্ভর করে করুন।

আমি আপনাকে যে প্রশ্নের উত্তর দিয়েছিলাম তার লিঙ্কটি এখানে দেওয়া হয়েছে যা সম্পর্কে আমি বস্তুর যুক্তি থেকে নিয়ন্ত্রণগুলি পৃথক করার বিষয়ে উত্তর দিয়েছি। এটিতে একটি কোড নমুনাও রয়েছে যা আমার চিন্তার চিত্র তুলে ধরে।

ক্লাস ব্যবহার করে এক্সএনএতে আমার স্প্রিটটি সরানো

( দুর্ভাগ্যক্রমে, উত্তরটির কোনও এখনও ওপি গ্রহণ করেনি, সুতরাং এটি তার উদ্বেগের সমাধান করেছে কিনা তা আমরা নিশ্চিতভাবে জানি না Besides এছাড়াও আমি সবসময় এইভাবে ডিজাইন করছি এবং এখনও পর্যন্ত এটি করে কোনও সমস্যা পাইনি ))

এখন আমি জানি, এটি এক্সএনএ ট্যাগ করেছে। ধারণা বা নকশাটি যে প্রযুক্তি ব্যবহার করা হয় তার চেয়ে বেশি একটি আর্কিটেকচার স্তর, সুতরাং এই নকশাটি কেবল জাভা সিনট্যাক্সের সাথে মানিয়ে নেওয়া যেতে পারে। সাধারণ ধারণাটি একই থাকে। =)

আমি আশা করি এটি সাহায্য করে! আমি যখন সাহায্য করতে পারি তখন আরও সাহায্য করতে পেরে খুশি হব, কেবল জিজ্ঞাসা করুন! =)


5

উইলের উত্তর আপনাকে দেখায় যে সম্ভবত সবচেয়ে নমনীয় এবং সোজা is

তবে, বিপুল পরিমাণে স্যুইচ এড়ানো এবং যদি বিবৃতি দেওয়া হয় তবে আপনার যদি বিট ফ্ল্যাগ এনামগুলি ব্যবহার করতে পারেন তবে বোতাম টিপে বিভিন্ন সংমিশ্রণের জন্য যদি আপনার কোনও সহজ পদ্ধতির প্রয়োজন হয়।

আপনি বিট ভেক্টর সম্পর্কে যা জানেন তা আমি পছন্দ করি না, সুতরাং এখানে একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে: মূলত, আপনার কাছে একটি এনম ক্লাস রয়েছে যা সমস্ত সম্ভাব্য কীগুলি উপস্থাপন করে। প্রতিটি এনামের একটি মান হওয়া উচিত যা একটি পূর্ণসংখ্যার সাথে কিছুটা মিলে যায়। (যেমন: 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0011, 0x0012, 0x0014, ইত্যাদি)। ( জাভাতে এটি করার জন্য লিঙ্ক করুন )।

এখন, যেহেতু আপনি 32 (বা যদি আপনি দীর্ঘায়িত ব্যবহার করেন) কীগুলি সম্পর্কে তথ্য প্রায় পাস করতে পারেন, আপনার কাছে একটি হ্যাশ টেবিল থাকতে পারে যা বিট ভেক্টরগুলিকে (ইনট বা লম্বা) কিছু ধরণের কীকম্বক্যালব্যাক ইন্টারফেসের পতনের সাথে যুক্ত করে, যার মধ্যে কেবল একটি রয়েছে একক পদ্ধতিতে কল করুন, (কী) করুন, যখন কীগুলির সংযুক্ত সংমিশ্রণটি চাপ দেওয়া হয় called

এখন আপনি যখন আপনার প্লেয়ার অবজেক্ট বা আপনার মেনু অবজেক্টটি ইনস্ট্যান্ট / ইনিশিয়েট করবেন, আপনি কোনও ধরণের ইনপুট ম্যানেজারকে কল করতে পারেন এবং এটি আপনার পছন্দসই সমস্ত কী সংমিশ্রণ বিট ভেক্টরগুলি পাস করতে পারেন এবং তাদের বেনামে অভ্যন্তর শ্রেণীর সাথে সংযুক্ত করতে পারেন।

// ... in your init code for Player

InputManager.map(
    KeyMap.A.val() | KeyMap.B.val() | KeyMap.C.val(), 
    new KeyComboCallback(KeyMap keys) {
        public void Do() {
           this.DoCrazyAwesomeComboAttack();
        }
    });

// ...  continue init

এটি সি ++ এবং সি # তে সত্যিই দ্রুত এবং সুবিধাজনক, তবে জাভা এনামগুলি বিশেষ, তাই আপনি কী কীম্বিনেশন ক্লাস তৈরি করতে আরও সুবিধাজনক বলে মনে করতে পারেন যা এনামগুলি নিয়ে চিন্তা না করে এই সমস্ত তথ্য সংরক্ষণ করবে will তবে ধারণাটি এখনও একইরকম। আমি এটি এক্সএনএ গেমটিতে ব্যবহার করছি এবং আমার সুবিধাটি অনেক পছন্দ। আপনি এটি আলাদা আলাদা ইনপুট অঞ্চলগুলিতেও ব্যবহার করতে পারেন যা কীবোর্ডের বিভিন্ন অংশ বা গেমপ্যাডের স্বাধীনভাবে তুলনা করার জন্য দরকারী (এক কীবোর্ডে দু'জন খেলোয়াড়ের পক্ষে কার্যকর হতে পারে)।


আমি আপনার পোস্টটি বিশেষত "এটি.ডোক্রেজিআউজমিন কম্বোএট্যাক (); XD। আপনার পথটি জটিল স্টাফগুলির জন্য সর্বোত্তম উপায় বলে মনে হচ্ছে, তাই আমি সহজ স্টাফের সাথে আটকে যাচ্ছি। আপনার সাহায্যের জন্য ধন্যবাদ!
স্টিভেন রজার্স

+1 খুব আকর্ষণীয় উত্তর! আমি এই উত্তরটি থেকে শিখেছি এবং আমার শখের গেম বিকাশে আরও সময় দেওয়ার সময় আমি এটির নজর রাখব। এবং আমার উত্তরটি ভাল বলে দেওয়ার জন্য ধন্যবাদ, যদিও এটি সহজ স্টাফগুলির জন্য, যা আমি তর্ক করব না, যেহেতু আমি জিডির একজন শিক্ষানবিশ। =) ধন্যবাদ!
উইল মারকুইলার 13'13
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.