আমার পদার্থবিজ্ঞানের ইঞ্জিনে গতি এবং আপডেটের সমস্যার ক্রম


22

এখানে চিত্র বর্ণনা লিখুন

এই প্রশ্নটি হ'ল সংঘর্ষ সনাক্তকরণ এবং রেজোলিউশন সম্পর্কিত আমার আগের প্রশ্নটির একটি "ফলো-আপ" প্রশ্ন, যা আপনি এখানে খুঁজে পেতে পারেন ।


আপনি যদি আগের প্রশ্নটি পড়তে না চান তবে আমার পদার্থবিজ্ঞানের ইঞ্জিন কীভাবে কাজ করে সে সম্পর্কে এখানে একটি সংক্ষিপ্ত বিবরণ দেওয়া হল:

প্রতিটি শারীরিক সত্তা এসএসএসপিবিডি নামে একটি শ্রেণিতে সঞ্চিত থাকে।

শুধুমাত্র এএবিবি সমর্থিত।

প্রতিটি এসএসপিবিডি এসএসএসপি ওয়ার্ল্ড নামে একটি শ্রেণিতে সঞ্চিত থাকে যা প্রতিটি দেহ আপডেট করে এবং মাধ্যাকর্ষণ পরিচালনা করে।

প্রতিটি ফ্রেম, এসএসএসপি ওয়ার্ল্ড প্রতিটি দেহ আপডেট করে।

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

যখন কোনও দেহের সাথে অন্যের সংঘর্ষ হয়, তখন এটি কেবল তার নিজের গতিবেগকে দেহের গতিবেগ সেট করে অন্যটির কাছে তার গতিবেগ স্থানান্তর করে।

একটি দেহ বেগ হয় যখন সেট করা হয় যখন এটি শেষ ফ্রেম থেকে অবস্থান পরিবর্তন করে না। যদি এটি কোনও চলমান শরীরের সাথেও সংঘর্ষ হয় (যেমন একটি লিফট বা একটি চলমান প্ল্যাটফর্ম) এটি লিফটের গতিবিধির পার্থক্য গণনা করে যে শরীর তার শেষ অবস্থান থেকে সরেনি কিনা তা দেখার জন্য।

এছাড়াও, যখন তার সমস্ত এএবিবি কোণে কোনও ফ্রেমে কোনও কিছুকে ওভারল্যাপ করে তখন কোনও দেহ একটি "চূর্ণবিচূর্ণ" ইভেন্টটি আহ্বান করে।

এটি আমার গেমের সম্পূর্ণ উত্স কোড। এটি তিনটি প্রকল্পে বিভক্ত। এসএফএমএল স্টার্ট হ'ল একটি সাধারণ লাইব্রেরি হ্যান্ডলিং ইনপুট, অস্তিত্বগুলির অঙ্কন এবং আপডেট। এসএফএমএলস্টার্টফিজিক্স সর্বাধিক গুরুত্বপূর্ণ, যেখানে এসএসপিবিডি এবং এসএসএসপি ওয়ার্ল্ড ক্লাস রয়েছে। প্ল্যাটফর্মারফিজিক্সস্টেস্ট হ'ল গেম প্রজেক্ট, এতে সমস্ত গেম যুক্তি রয়েছে।

আর এই SSSPBody বর্গ, মন্তব্য এবং সরলীকৃত মধ্যে "আপডেট" পদ্ধতি। আপনি যদি পুরো এসএফএমএলস্টার্টসিম্পল ফিজিক্স প্রকল্পটি দেখে মনে করেন না তবে আপনি কেবল এটি দেখতে পারেন। (এবং আপনি তা করলেও, এটির মন্তব্য হওয়ার পরেও আপনার এটি একবার নজর দেওয়া উচিত))


.Gif দুটি সমস্যা দেখায়।

  1. মৃতদেহগুলি যদি একটি পৃথক ক্রমে স্থাপন করা হয় তবে বিভিন্ন ফলাফল ঘটে। বামদিকে ক্রেটগুলি ডানদিকে ক্রেটগুলির সমান, কেবল বিপরীত ক্রমে (সম্পাদকে) স্থাপন করা হয়েছে।
  2. উভয় ক্রেট পর্দার শীর্ষের দিকে চালিত করা উচিত। বাম দিকে পরিস্থিতিতে, কোনও ক্রেট চালিত হয় না। ডানদিকে, তাদের মধ্যে একটি মাত্র। উভয় পরিস্থিতি অনিচ্ছাকৃত।

প্রথম সমস্যা: আপডেটের ক্রম

এটি বুঝতে মোটামুটি সহজ। বামদিকে অবস্থানে, শীর্ষের ক্রেটটি অন্যটির আগে আপডেট করা হয়। এমনকি যদি নীচের ক্রেটটি অন্যটিতে "স্থানান্তর" গতিবেগ করে, তার পরের ফ্রেমটি সরাতে অপেক্ষা করা প্রয়োজন। যেহেতু এটি সরেনি, নীচের ক্রেটের বেগ 0 তে সেট করা আছে।

কীভাবে এটি ঠিক করতে হবে আমার কোনও ধারণা নেই। আপডেট তালিকার "বাছাই" করার উপর নির্ভর না করার জন্য আমি সমাধানটি পছন্দ করব, কারণ আমি অনুভব করি যে আমি পুরো পদার্থবিজ্ঞানের ইঞ্জিন ডিজাইনে কিছু ভুল করছি।

প্রধান পদার্থবিজ্ঞানের ইঞ্জিনগুলি (বক্স 2 ডি, বুলেট, চিপমঙ্ক) কীভাবে আপডেটের আদেশটি পরিচালনা করে?


দ্বিতীয় সমস্যা: কেবলমাত্র একটি ক্রেট সিলিংয়ের দিকে চালিত হয়

আমি কেন বুঝতে পারি না কেন এটি ঘটে। "বসন্ত" সত্তা যা করে তা হ'ল দেহের গতিবেগ -4000 এ সেট করে এবং এটি বসন্তের শীর্ষে পুনরায় অবস্থান। আমি পুনরায় অবস্থানের কোডটি অক্ষম করলেও, সমস্যাটি এখনও ঘটে।

আমার ধারণা হ'ল নীচের ক্রেটটি যখন শীর্ষ ক্রেটের সাথে সংঘর্ষ হয়, তখন এর গতিবেগ সেট করা থাকে I'm কেন এটি ঘটে তা আমি নিশ্চিত নই।


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

আমি মনে করি না যে আমি গেম থেকে অনেকগুলি বৈশিষ্ট্য না ছড়িয়ে (নিজেই গতিতে স্থানান্তর এবং স্প্রিংস উদাহরণস্বরূপ) নিজের থেকে সমাধান খুঁজে পেতে পারি।

এই প্রশ্নটি পড়ার জন্য যে সময় ব্যয় হয়েছে তার জন্য অনেক ধন্যবাদ, এমনকি যদি আপনি কোনও সমাধান বা পরামর্শ নিয়ে আসতে চেষ্টা করেন তবে আরও অনেক ধন্যবাদ।


আপনি যখনই বাক্সগুলি স্ট্যাক করছেন তখন আপনি কি তাদের পদার্থবিজ্ঞানের সমন্বয় করতে পারতেন যাতে সেগুলিকে একটি একক বস্তু হিসাবে বিবেচনা করা হয়?
সিসকোআইপিফোন

উত্তর:


12

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

যাই হোক না কেন, আপনার প্রয়োজনের জন্য একটি প্রবণতা সিস্টেমে পর্যাপ্ত হিচাপ রয়েছে যা আমি আপনাকে পরিবর্তে একটি ভর-বসন্ত মডেল তৈরির পরামর্শ দিই।

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

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

সংঘর্ষের লম্ব দিকের দিকে কোনও বস্তুকে ব্রেক করে আপনি ঘর্ষণ প্রভাবও তৈরি করতে পারেন, ব্রেকিংয়ের পরিমাণ ওভারল্যাপের পরিমাণের সমান হতে হবে।

আপনি সমস্ত বস্তুর সমান ভর তৈরি করে আপনি সহজেই ভর ধারণাটি পেতে পারেন এবং অস্থাবর বস্তুগুলি যদি আপনি কেবল তাত্পর্যকে অবহেলা করেন তবে অসীম ভর থাকার মতো কাজ করবে।

কিছু ছদ্ম-কোড, কেবলমাত্র যদি উপরেরটি যথেষ্ট পরিমাণে পরিষ্কার না হত:

//Presuming that you have done collision checks between two objects and now have  
//numbers for how much they overlap in each direction.
overlapX
overlapY
if(overlapX<overlapY){ //Do collision in direction X
    if(obj1.X>obj2.X){
        swap(obj1,obj2)
    }
    //Spring effect:
    obj1.addXvelocity-=overlapX*0.1 //Constant, the lower this is set the softer the  
                                    //collision will be.
    obj2.addXvelocity+=overlapX*0.1
    //Dampener effect:
    velocityDifference=obj2.Xvelocity-obj1.Xvelocity
    //velocityDifference=min(velocityDifference,0) //Uncomment to only dampen when  
                                                   //objects move towards each other.
    obj1.addXvelocity+=velocityDifference*0.1 //Constant, higher for more dampening.
    obj2.addXvelocity-=velocityDifference*0.1
    //Friction effect:
    if(obj1.Yvelocity>obj2.Yvelocity){
        swap(obj1,obj2)
    }
    friction=overlapX*0.01
    if(2*friction>obj2.Yvelocity-obj1.Yvelocity){
        obj1.addYvelocity+=(obj2.Yvelocity-obj1.Yvelocity)/2
        obj2.addYvelocity-=(obj2.Yvelocity-obj1.Yvelocity)/2
    }
    else{
        obj1.addYvelocity+=friction
        obj2.addYvelocity-=friction
    }
}
else{ //Do collision in direction Y

}

অ্যাড এক্সোলোসিটি এবং অ্যাডওয়াইলোসিটি বৈশিষ্ট্যগুলির বিন্দুটি হ'ল সমস্ত সংঘর্ষ হ্যান্ডলিংয়ের পরে এগুলি তাদের বস্তুর গতিতে যুক্ত হয়।

সম্পাদনা করুন:
আপনি নিম্নলিখিত ক্রমে স্টাফ করতে পারবেন যেখানে প্রতিটি বুলেট অবশ্যই পরবর্তী উপাদানগুলি সম্পাদন করার আগে সমস্ত উপাদানগুলিতে করা উচিত:

  • সংঘর্ষগুলি সনাক্ত করুন, সনাক্ত হওয়ার সাথে সাথে এগুলি সমাধান করা যেতে পারে।
  • গতিবেগের মানগুলিতে অ্যাডভেলোসিটি মান যুক্ত করুন, মাধ্যাকর্ষণ গতিবেগ যুক্ত করুন, অ্যাডভেলোসিটি মানগুলিকে 0-এ পুনরায় সেট করুন, বস্তুগুলিকে তাদের বেগ অনুসারে সরিয়ে দিন move
  • দৃশ্যটি রেন্ডার করুন।

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

সম্পাদনা 2:
খুব বেসিক পদার্থবিজ্ঞানের ইঞ্জিন প্রবাহ:

  • সংঘর্ষ এবং মাধ্যাকর্ষণ শক্তি / ত্বরণ উত্পাদন করে। acceleration = [Complicated formulas]
  • গতিবেগকে বল / ত্বরণ যোগ করা হয়। velocity += acceleration
  • वेग পজিশনে যুক্ত করা হয়। position += velocity

দেখতে দেখতে দুর্দান্ত, প্ল্যাটফর্মারদের জন্য ভর-বসন্ত সম্পর্কে কখনও ভাবেনি। কিছু আলোকিত করার জন্য
থাম্বস

আমি ঘরে ফিরলে কয়েক ঘন্টার মধ্যে এটি বাস্তবায়নের চেষ্টা করব। আমি কি (পজিশন + = বেগ) সংস্থাগুলি একই সাথে স্থানান্তরিত করে তারপরে সংঘর্ষের জন্য চেক করতে পারি, বা সরানো এবং একে একে একে সংঘর্ষের জন্য পরীক্ষা করা উচিত? [এছাড়াও, সংঘর্ষগুলি সমাধান করার জন্য কি আমাকে ম্যানুয়ালি অবস্থানটি সংশোধন করতে হবে? বা গতিবেগ পরিবর্তন করা কি এটির যত্ন নেবে?]
ভিটোরিও রোমিও

আপনার প্রথম প্রশ্নের কীভাবে ব্যাখ্যা করা যায় তা আমি পুরোপুরি নিশ্চিত নই। সংঘর্ষের রেজোলিউশন বেগটি পরিবর্তন করবে এবং এইভাবে কেবল পরোক্ষভাবে অবস্থানকে প্রভাবিত করে।
aaaaaaaaaaaa

আসল বিষয়টি হ'ল আমি সত্তাগুলি ম্যানুয়ালি একটি বেগকে একটি নির্দিষ্ট মান হিসাবে সেট করে সরিয়ে নিয়েছি। ওভারল্যাপগুলি সমাধান করার জন্য, আমি তাদের অবস্থান থেকে ওভারল্যাপের দূরত্বটি সরিয়েছি। আমি যদি আপনার পদ্ধতিটি ব্যবহার করি তবে আমাকে কি বাহিনী বা অন্য কিছু ব্যবহার করে সত্তাগুলি স্থানান্তর করতে হবে? আমি এর আগে কখনও করিনি।
ভিটোরিও রোমিও

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

14

ঠিক আছে, আপনি স্পষ্টতই এমন একজন নন যিনি সহজেই হাল ছেড়ে দেন, আপনি লোহার সত্যিকারের মানুষ, আমি অনেক আগেই বাতাসে আমার হাত ছুঁড়ে ফেলতাম, যেহেতু এই প্রকল্পটি খাসির বনের সাথে দৃ strong় সাদৃশ্য রাখে :)

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

প্রথম সমস্যা।

প্রশ্ন নিজেই। এখন আপনি উপস্থিতি এবং গেম যুক্তির ক্রম হিসাবে কেবলমাত্র পজিশন এবং বেগগুলি ঠিকঠাক হিসাবে "সেগুলি" প্রয়োগ করছেন। এটি প্রতিটি জটিল জিনিসের পদার্থবিজ্ঞানের যত্ন সহকারে কোডিং ব্যতীত জটিল ইন্টারঅ্যাকশনগুলির জন্য কাজ করবে না। আলাদা পদার্থবিজ্ঞানের ইঞ্জিনের তখন দরকার নেই।

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

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

অতিরিক্ত জিনিসগুলি পপআপ হতে পারে যেমন ঝাঁকুনির সাথে ডিল করা, এফপিএস ছোট হলে স্ট্যাক আপ করতে অস্বীকৃতি, বা এই জাতীয় জিনিসগুলি প্রস্তুত থাকতে পারে :)

দ্বিতীয় সমস্যা

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

তৃতীয় সমস্যা

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


আমি "ক্যাল্প বন" তুলনা পছন্দ।
ডেন

আসলে, আমি এই জাতীয় শব্দ ব্যবহার করে কিছুটা লজ্জা পেয়েছি, কিন্তু আমি অনুভব করেছি যে এটি যদি দু'একটি রিফ্যাক্টরিংয়ের ফলস্বরূপ হয় তবে তা ন্যায়সঙ্গত হবে।
এনাফটাইয়া

শুধুমাত্র একটি একক পরীক্ষা দিয়ে টি সেখানে সবসময় একটি সম্ভাবনা এই ঘটনার যে হবে? আমি কল্পনা যে তোমার দিকে বেগ সংহত করার প্রয়োজন চাই টন এবং তারপর দুর্ঘটনায় জন্য চেক টি +1 0 কোনো বেগ সংযোজনা করার আগে?
জোনাথন কনেল

হ্যাঁ, আমরা রঞ্জ-কট্টা বা অন্য কিছু ব্যবহার করে প্রাথমিক অবস্থা টি থেকে টি + ডিটি পর্যন্ত সংহত করার পরে সংঘর্ষগুলি সনাক্ত করছি।
এনাফটাইয়া

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

7

যখন কোনও দেহের সাথে অন্যের সংঘর্ষ হয়, তখন এটি কেবল তার নিজের গতিবেগকে দেহের গতিবেগ সেট করে অন্যটির কাছে তার গতিবেগ স্থানান্তর করে।

আপনার সমস্যাটি হ'ল গতি সম্পর্কে এগুলি মূলত ভুল অনুমান, সুতরাং আপনি যা পান তা গতির সাথে সাদৃশ্যপূর্ণ না কারণ আপনি এটির সাথে পরিচিত।

যখন কোনও শরীরে অন্যের সাথে সংঘর্ষ হয়, তখন গতি সংরক্ষণ করা হয়। এটিকে "এ হিট বি" বনাম "বি হিট এ" হিসাবে ভাবার অর্থ হ'ল এক ট্রান্সসিটিভ ক্রিয়াটি একটি ইন্টারানসিটিভ পরিস্থিতিতে প্রয়োগ করা। এ এবং বি সংঘর্ষ; ফলস্বরূপ গতি অবশ্যই প্রাথমিক গতির সমান হতে হবে। এটি হ'ল, যদি ক এবং বি সমান ভর হয় তবে তারা এখন উভয়ই তাদের মূল বেগের গড় নিয়ে ভ্রমণ করছে।

আপনার সম্ভবত কিছু সংঘর্ষের opালু এবং একটি পুনরাবৃত্ত সমাধানকারী প্রয়োজন হবে, বা আপনি স্থিতিশীলতার সমস্যাগুলিতে চলে যাবেন। আপনার সম্ভবত সম্ভবত এরিন ক্যাটোর জিডিসির উপস্থাপনাগুলির মধ্য দিয়ে পড়া উচিত।


2
সংঘর্ষটি সম্পূর্ণরূপে অস্বচ্ছ থাকলে যেমন এ এবং বি ময়দার টুকরো হয় তবেই তারা মূল গতির বেগ পেতে পারে।
মিকেল Öhman

"কেবল নিজের শরীরের গতিবেগ সেট করে"। এটি এই জাতীয় বিবৃতি যা এটি কাজ করে না কেন আলোকিত করে। সাধারণভাবে আমি সর্বদা খুঁজে পেয়েছি যে অনভিজ্ঞ ব্যক্তিরা জড়িত অন্তর্নিহিত নীতিগুলি না বুঝে পদার্থবিজ্ঞান সিস্টেম লেখেন। আপনি কখনও 'কেবল বেগ সেট' করেন না, বা 'কেবল ...' করেন না। কোনও দেহের বৈশিষ্ট্যগুলির প্রতিটি সংশোধন গতিশীলতার আইনগুলির সরাসরি প্রয়োগ হওয়া উচিত; গতিবেগ, শক্তি ইত্যাদির সংরক্ষণ সহ হ্যাঁ সর্বদা অস্থিরতার জন্য ক্ষতিপূরণ দেওয়ার জন্য ঝকঝকে কারণগুলি থাকবে তবে কোনও মুহুর্তে আপনি কেবল যাদুতে কোনও দেহের বেগ পরিবর্তন করতে পারবেন না।
মিঃ ক্র্যাঙ্কি

প্রথম স্থানে ইঞ্জিন চালানোর চেষ্টা করার সময় অবাস্তব শরীর অনুমান করা সবচেয়ে সহজ, সমস্যা সমাধানের জন্য যত কম জটিল তত জটিল।
প্যাট্রিক হিউজেস

4

আমি মনে করি আপনি সত্যিই মহৎ প্রচেষ্টা করেছেন, তবে মনে হয় কোডটি কীভাবে কাঠামোবদ্ধ করা হয়েছে তাতে মূল সমস্যা রয়েছে। অন্যরা যেমন পরামর্শ দিয়েছে, অপারেশনগুলি বিচক্ষণ অংশে পৃথক করতে সহায়তা করতে পারে, যেমন:

  1. ব্রড ফেজ : সমস্ত বস্তুর মধ্য দিয়ে লুপ করুন - কোন বস্তু সংঘটিত হতে পারে তা নির্ধারণ করার জন্য একটি দ্রুত পরীক্ষা (যেমন, এএবিবি) করুন - যা নেই তা বাতিল করুন।
  2. সংকীর্ণ পর্যায় : সমস্ত সংঘর্ষযুক্ত বস্তুর মধ্য দিয়ে লুপ করুন - সংঘর্ষের জন্য একটি অনুপ্রবেশ ভেক্টর গণনা করুন (যেমন, স্যাট ব্যবহার করে)।
  3. সংঘর্ষের প্রতিক্রিয়া : সংঘর্ষের ভেক্টরগুলির তালিকার মধ্য দিয়ে লুপ করুন - ভরগুলির উপর ভিত্তি করে একটি ফোর্স ভেক্টর গণনা করুন, তারপরে একটি ত্বরণ ভেক্টর গণনা করতে এটি ব্যবহার করুন।
  4. ইন্টিগ্রেশন : লুপ সব ত্বরণ ভেক্টর দিয়ে অবস্থান সংহত (এবং ঘূর্ণন প্রয়োজন থাকেন)।
  5. রেন্ডারিং : সমস্ত গণনা করা অবস্থানের মধ্য দিয়ে লুপ করুন এবং প্রতিটি বস্তু রেন্ডার করুন।

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

এটি বলেছিল যে, এই প্রতিটি অংশই নিজের মধ্যে একটি বিজ্ঞান, এবং সর্বোত্তম সমাধানটি সন্ধান করার জন্য প্রচুর সময় ব্যয় করতে পারে। সর্বাধিক ব্যবহৃত অ্যালগরিদম দিয়ে শুরু করা ভাল:

  • ব্রড ফেজ সংঘর্ষের সনাক্তকরণ : স্থানিক হ্যাশ
  • সংকীর্ণ পর্যায়ে সংঘর্ষ শনাক্তকরণ : সাধারণ টাইল পদার্থবিজ্ঞানের জন্য, আপনি কেবল অক্ষ সংলগ্ন বাউন্ডিং বক্স (এএবিবি) ছেদ পরীক্ষাগুলি প্রয়োগ করতে পারেন। আরও জটিল আকারের জন্য আপনি পৃথক অক্ষের উপপাদ্যটি ব্যবহার করতে পারেন । আপনি যে কোনও অ্যালগরিদম ব্যবহার করুন না কেন, এটি দুটি বস্তুর (অনুপ্রবেশ ভেক্টর নামে পরিচিত) মধ্যে ছেদ করার দিক এবং গভীরতা ফিরিয়ে আনবে।
  • সংঘর্ষের প্রতিক্রিয়া : আন্তঃ অনুপ্রবেশ সমাধানের জন্য প্রক্ষেপণ ব্যবহার করুন ।
  • সংহতকরণ: ইন্টিগ্রেটারটি ইঞ্জিনের স্থায়িত্ব এবং গতির বৃহত্তম নির্ধারক। দুই জনপ্রিয় অপশন আছে Verlet (দ্রুত কিন্তু সহজ) অথবা RK4 (সঠিক কিন্তু ধীর) ইন্টিগ্রেশন। ভারলেট ইন্টিগ্রেশন ব্যবহার করা বেশিরভাগ শারীরিক আচরণ (বাউন্স, রোটেশন) খুব বেশি প্রচেষ্টা ছাড়াই কাজ করে বলে একটি অত্যন্ত সাধারণ নকশা তৈরি করতে পারে। আর কে 4 ইন্টিগ্রেশন শেখার জন্য আমি যে সেরা রেফারেন্স দেখেছি তার মধ্যে একটি হ'ল গেমসের জন্য পদার্থবিজ্ঞানের উপর গ্লেন ফিডলারের সিরিজ

শুরু করার জন্য একটি ভাল (এবং সুস্পষ্ট) জায়গাটি নিউটনের গতির আইনগুলির সাথে রয়েছে


জবাবের জন্য ধন্যবাদ. যদিও আমি মৃতদেহের মধ্যে বেগ কীভাবে স্থানান্তর করব? এটি কি সংহতকরণের পর্যায়ে ঘটে?
ভিটোরিও রোমিও

এক অর্থে, হ্যাঁ वेग স্থানান্তর সংঘর্ষ প্রতিক্রিয়া পর্ব দিয়ে শুরু হয়। এটি যখন আপনি দেহের উপর ক্রিয়াকলাপগুলি গণনা করেন। সূত্র ত্বরণ = বল / ভর ব্যবহার করে জোর ত্বরণে অনুবাদ করে। গতি গণনা করার জন্য সংহতকরণ পর্বে ত্বরণ ব্যবহৃত হয়, যা পরে অবস্থান নির্ণয়ের জন্য ব্যবহৃত হয়। ইন্টিগ্রেশন পর্বের যথার্থতা সময়ের সাথে গতিবেগ (এবং পরবর্তী অবস্থানে) কতটা সঠিকভাবে পরিবর্তিত হয় তা নির্ধারণ করে।
লুক ভ্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.