আমি কীভাবে সাপের লেজ মাথা অনুসরণ করতে পারি?


10

একটি অ্যাসাইনমেন্ট অনুসরণ করে এবং একটি ছোট স্নেক ক্লোন তৈরি করে libGDX দিয়ে সবে শুরু করার সাথে সাথে আমি এমন একটি সমস্যা নিয়ে এসেছি যা আমি সম্ভবত কিছুক্ষণের জন্য লজ্জিত হব।

আমার বর্তমানে একটি সাপের মাথা রয়েছে (এই পর্যায়ে একটি সরল আয়তক্ষেত্র) গেমের ক্যানভাসের চারদিকে ঘুরছে। বাকি সাপটি তৈরির সর্বাধিক সোজা-সামনের উপায়টি হ'ল মাথার একটি স্নেকএলিমেন্টের জাভা কালেকশন লিঙ্কডলিস্টের মালিক হওয়া ছিল যা প্লেয়ারটি যা করে তার আকার অনুসারে আকারে হ্রাস পাবে।

স্নেকএলমেন্টের এই তালিকাটি মাথা অনুসরণ করে তবে তুচ্ছ নয় বলে প্রমাণিত হয়েছে।

বর্তমান ফাংশনটি এটি করছে নিম্নরূপে এবং যতবার মাথা তার অবস্থান আপডেট করে প্রতিবার বলা হয়:

private void moveTail (float x, float y, int direction) {
    float tmpx, tmpy;
    int tmpdirection;
    int offset_x, offset_y;

    for (SnakeSegment snse : tail) {
        offset_x = 0;
        offset_y = 0;

        tmpx = snse.getX();
        tmpy = snse.getY();
        tmpdirection = snse.getDirection();

        switch(direction) {
            case 0:
                offset_x = 0;
                offset_y = -(2 + snse.width);
                break;
            case 1:
                offset_x = -(2 + snse.width);
                offset_y = 0;
                break;
            case 2:
                offset_x = 0;
                offset_y = (2 + snse.width);
                break;
            case 3:
                offset_x = (2 + snse.width);
                offset_y = 0;
                break;
            default:
                System.out.println("wrong direction");
        }

        snse.setX(x + offset_x);
        snse.setY(y + offset_y);
        snse.setDirection(direction);

        x = tmpx;
        y = tmpy;
        direction = tmpdirection;
    }
}

দুর্ভাগ্যক্রমে এই আচরণের ফলাফল:

GIF

কীভাবে সঠিকভাবে কাজ করে যাওয়া সাপের লেজ তৈরি করা যায় তার জন্য কোনও পরামর্শ খুব প্রশংসা হবে :)

উত্তর:


18

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

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


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

1
এটি সম্পর্কে ভাবার একটি বিকল্প উপায় হ'ল প্রতিটি সাপের উপাদান মাথা অনুসরণ না করে কেবল তার সামনে সরাসরি উপাদানটিকে অনুসরণ করে। এটি কার্যকর হবে যদি, পরে, সাপগুলি টেক্সচারযুক্ত হয় বা এর মতো কিছু।
নাথান রিড

2
এখানে বর্তমান সংস্করণটি এখানে আবার ধন্যবাদ, :) :) i.imgur.com/IaT5PNH.gif
কিলিয়ান

1

আমি এটি যেভাবে দেখছি এটি সিস্টেমের মতো "ক্যাটারপিলার" হিসাবে রয়েছে, যেখানে সাপের প্রতিটি অংশ তার সামনে অংশটি অনুসরণ করে।

অন্য কথায়, সাপের প্রতিটি অংশ হ'ল অবজেক্ট উইথ পজিশন (x, y) হবে , এটির সামনের অংশটির একটি রেফারেন্স যা এটি ঘুরে বেড়ানোর জন্য ব্যবহার করবে এবং অংশটির অবস্থানের প্রসেসের জন্য একটি ক্রিয়া ব্যবহার করবে এবং অনুসারে সরান। প্রধান সাপের (হেড) সাপের প্রতিটি অংশের জন্য রেফারেন্স থাকতে হবে এবং অংশটিকে তার পূর্বসূরীর অনুসরণ করার জন্য দায়ী ফাংশনটিকে ডাকা হবে, প্রধানটি প্রথম অংশের পূর্বসূরি হিসাবে।
আশা করি এটা সাহায্য করবে!


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

আমি দেখি. আমি কেবলমাত্র একবার শুঁয়োপোকা সিস্টেমটি প্রয়োগ করলাম তার অংশগুলির আকারের সাথে আমার একটি গ্রিড ছিল, তাই প্রতিটি অংশ সর্বদা একটি নির্দিষ্ট কোষের অভ্যন্তরে ছিল, এইভাবে সমস্যাটি দেখা দেয় নি। আমার অদক্ষ ইংরেজির জন্য আমি দুঃখিত.
লিন্ড অ্যাসাসিনো

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