Box2D (libGDX) এ মিলি অস্ত্র তৈরি করা হচ্ছে


10

আমি কীভাবে চাপ দিলে কীভাবে ঝাঁকুনির ঝাঁকুনির ঝাঁকুনি প্রয়োগ করতে পারি তা নিয়ে আমি লড়াই করছি।

আমি দুটি পৃথক আক্রমণ (ছুরিকাঘাত এবং দোল) কল্পনা করছি

আমি দুটি ফিক্সার (চরিত্র + অস্ত্র) তৈরি করার চেষ্টা করেছি, দুটি পৃথক সংস্থা, দুটি পৃথক সংস্থা + রিভলিউট যৌথ, তবে আমি এটি যেভাবে দেখতে কল্পনা করি সেভাবে আচরণ করার জন্য এটি কোড করতে পারি না। আমার কল্পনা

ছুরিকাঘাত:

সুতরাং একটি বোতাম টিপে, একটি শরীর / ফিক্সচার (সেন্সর) ~ 1 সেকেন্ডের জন্য বেরিয়ে আসে এবং তার পরে অদৃশ্য হয়ে যায় (বিকল্পভাবে, শরীর / স্থিতিস্থাপক সর্বদা নায়কের উপরে থাকতে পারে এবং টিপে যখন অনুচ্ছেদটি প্রায় 90 ডিগ্রি ঘোরানো হয়, এবং তারপরে আবার স্বাভাবিক অবস্থায় ঘোরান)

দোল:

একই জিনিস, তবে এখন অস্ত্রটি শীর্ষ থেকে শুরু হবে এবং নীচের দিকে দুলবে। অস্ত্রও সেন্সর হবে।

আমি যা চেষ্টা করেছি:

আমি দুটি গতিশীল সংস্থা তৈরি করেছি।

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


যেহেতু আপনি ইতিমধ্যে আয়তক্ষেত্রাকার আকারের দেহ / ফিক্সচার তৈরি করেছেন, আপনি কেবল তরোয়াল শরীরটি 90 ডিগ্রিটি ডান দিকে ঘোরতে হবে সুইং অ্যানিমেশনের জন্য। অ্যানিমেশনটি না ঘটলে এবং এটিকে স্ক্রিনে আঁকেন না এমন সময় আপনাকে তরোয়াল দেহের সংঘর্ষগুলি বন্ধ করতে হবে। ছুরিকাঘাত অ্যানিমেশনটি দোলের কেবল একটি সহজ সংস্করণ, যেখানে তরোয়ালটির একটি পৃথক কোণ রয়েছে। এটা ঠিক না? আমার কাছে বেশ সহজ মনে হচ্ছে। কোথায় আটকে গেছেন?
dimitris93

সমস্যা কি ওভারল্যাপিং তরোয়াল এবং নায়ক? হতে পারে একটি ছোট বর্গক্ষেত্রের দেহ তরোয়াল টিপ হতে পারে যাতে এটি কখনই ওভারল্যাপ হয় না। সম্ভবত আরও কিছু তথ্যের জন্য সম্পাদনা করুন
ড্রামব্লামলক্যাটজ

@ শিরো আমি নীচে আমার প্রচেষ্টা অন্তর্ভুক্ত করেছি। এই মুহূর্তে আমি আটকে আছি কারণ কী কীভাবে একটি কী টিপে ঘূর্ণনটি শুরু করতে এবং থামাতে হয় তা আমি জানি না।
কুইডপ্রোকো

হ্যাঁ মনে হচ্ছে আপনার আসল প্রশ্নটি কী প্রেসে কোনও বস্তুটি কীভাবে আবর্তিত করা যায়
dimitris93

উত্তর:


1

ঘটনাচক্রে, আপনি যা করার চেষ্টা করছেন ঠিক আমি তা করে ফেলেছি। একমাত্র ক্যাচটি হ'ল আমি Jbox2d ব্যবহার করছিলাম তাই কোডটি জাভাতে রয়েছে, তবে আপনি এখনও সি ++ ব্যবহার করছেন কিনা তা খুঁজে বের করতে সক্ষম হবেন

আপনি যদি সুইংিং অ্যাকশন করতে চান তবে আপনাকে মূলত জয়েন্টগুলি / মোটর এবং সমস্ত মজাদার জিনিস ব্যবহার করতে হবে। কী ইনপুটটির উপর ভিত্তি করে আমার কোডটি কেমন দেখাচ্ছে তার একটি স্নিপেট এখানে দেওয়া হয়েছে:

    if (myinput.mouse0) {

        agents.get(0).rightForeJoint.enableMotor(true);
        agents.get(0).rightArmJoint.enableMotor(false);    

        if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)){
            agents.get(0).rightForeJoint.enableMotor(false);
        }

        mouseY = Mouse.getY();
        mouseX = Mouse.getX();
        float temp = mouseY - prevPos[1];

        float temp2 = -mouseX + prevPos[0];

        temp2 *= modifier; temp2 *= 0.000026;
        temp  *= modifier; temp  *= 0.000030;

        agents.get(0).armR.applyAngularImpulse(-temp);
        agents.get(0).foreR.applyAngularImpulse(temp2); 

        prevPos[1] = mouseY;
        prevPos[0] = mouseX;

        if(temp2 < 0){
            temp2 *=-1;
        }
        if(temp < 0){
            temp *=-1;
        }
        fatigueDrain += temp2;
        fatigueDrain += temp;

    }

এবং তারপরে যতক্ষণ পর্যন্ত অস্ত্র তৈরি করা যায় এবং কী নয়, স্নিপেটটি দেখতে এটির মতো লাগে।

    // RIGHTARM //
    this.rightArmDef = new RevoluteJointDef();
        this.rightArmDef.bodyA = this.torso ; this.rightArmDef.bodyB = this.armR;
        this.rightArmDef.collideConnected = false;

        torso_armL_pin = new Vec2(0.50f, +0.05f);
        local_armL_pin = new Vec2(0.14f, 0.14f);

        this.rightArmDef.localAnchorA.set(this.torso.getLocalCenter().add(torso_armL_pin));
        this.rightArmDef.localAnchorB.set(this.armR.getLocalCenter().add(local_armL_pin));

        this.rightArmDef.enableMotor = true;
        this.rightArmDef.motorSpeed = 0f;
        this.rightArmDef.maxMotorTorque =10f;

        this.rightArmDef.enableLimit = true;
        this.rightArmDef.lowerAngle = 1.2f;// * DEGTORAD;
        this.rightArmDef.upperAngle = 5;
    this.rightArmJoint = (RevoluteJoint)world.createJoint(this.rightArmDef);

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

সম্পাদনা >>

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

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


0

আমি এটিকে একরকমের মতো খুঁজে পেয়েছি, তবে আমি নিশ্চিত নই যে এটি কোড করার কোনও ভাল উপায় কিনা।

যখন একটি কী টিপানো হয়, আমি কৌনিক বেগ 10 এ সেট করি এবং তারপরে প্রতিটি আপডেটে, আমি এটি পরীক্ষা করতে বলি

    if(weapon.getAngle() >= Math.PI / 2) {
        weapon.setAngularVelocity(-10);
    }
    if(weapon.getAngle() <= 0) {
        weapon.setAngularVelocity(0);
    }

আপনার অভ্যন্তরে আপনার if(weapon.getAngle() <= 0)নিজের দ্বারা নির্দিষ্ট কোণে এটি ম্যানুয়ালি রেখে দেওয়া উচিত অন্যথায় এটি সঠিক হবে না এবং এর if-elseপরিবর্তে আপনার বিবৃতি প্রয়োজন if-if। এটি গেম সুনির্দিষ্ট সমস্যার সাথে করার জন্য বেসিক জাভা কোডিংয়ে নেমে আসে না।
dimitris93

0

আপনি যা বলছেন তা থেকে মনে হচ্ছে আপনাকে নির্দিষ্ট কোডটি পৌঁছানোর পরে কৌণিক বেগটি পুনরায় সেট করার কোডটি কেবল সরিয়ে নিতে হবে। আমার সন্দেহ হয় যে এই কোডটি কেবল তখনই বোতামটি টিপলে ব্যবহৃত হয়, আপনি যেহেতু দ্বিতীয় বার বোতাম টিপলে চলাচল বন্ধ হয়ে যায় (এবং এভাবে টেস্টিং কোডটি কাজ করে)।

যদি এটি হয় তবে কোডটি চাপানোর পরে আপনি যদি এটি পরীক্ষা করে থাকেন তবে আপনি এটি 'অন্য' বিবৃতিতে স্থানান্তর করতে পারেন।


0

আপনি যা করতে পারেন তা হ'ল কমান্ডে, এমন একটি পদ্ধতি চালান যা বডি.জেটপজিশন.সেট () ব্যবহার করে মূল শরীরের অবস্থানের সাথে সম্পর্কিত একটি শরীর তৈরি করবে; ফিল্টার বিটগুলি সংঘর্ষে না পড়ার জন্য সেট করুন, তারপরে রৈখিক বেগ নির্ধারণ করুন বা বল প্রয়োগ করুন, আপনি টাইমার শুরু করার পরে যা কিছু এগিয়ে যেতে চান x এক্স গেম লুপের পরে ধ্বংস করতে

অথবা আপনি একই জিনিসটি করতে পারেন তবে পরিবর্তে এক্স এক্স দিয়ে বরাবর একটি প্রিজমেটিক জয়েন্টের সাথে মিলিত করে একটি দূরত্বের যৌথ তৈরি করা যাতে সংঘর্ষের সাথে সংঘর্ষের সাথে আকস্মিক প্রসারিত গতি তৈরি হয় যাতে এটি মূল সংস্থার সাথে সংযোগ না দেয় এই বিকল্পটি হবে সম্ভবত আরও ভাল কাজ,

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

যদি কোনও অতিরিক্ত সহায়তার প্রয়োজন হয় তবে কেবল নীচে মন্তব্য করুন

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