আমি কীভাবে কোনও সত্তাকে কোনও দিকে চালিত করব?


11

আমার একটা আছে Entity উদাহরণ রয়েছে যা প্রতিটি গেমের টিকটি আপডেট হয়। আসুন ধরে নেওয়া যাক যে সত্তা অবিচ্ছিন্নভাবে এগিয়ে যায়। আমি সত্তার কোণটি কোনও ক্রিয়াকলাপকে দিতে সক্ষম হতে চাই যা এটি সেই দিকে এগিয়ে যায়:

moveForward(90);তাদের ডান দিকে সরানো উচিত। আমি যদি আমার ঘূর্ণনটিকে বিশ্ব হিসাবে ঘোষণা করি intতবে তা করছি

moveForward(rotation);
rotation++;

এটির চলাচলের সাথে এটি একটি ছোট চেনাশোনাটি তৈরি করবে।

কিভাবে আমি এটি করতে পারব? আমি ধরে নিই এর মধ্যে ভেক্টর ম্যাথ জড়িত; আমি কোনটি জানি না, সুতরাং একটি সংক্ষিপ্ত ব্যাখ্যাটি চমৎকার হবে।

উত্তর:


16

বেশ সহজ অর্থে আপনার কাছে এরকম কিছু রয়েছে।

   y  |\
      | \
   m  |  \         s
   o  |   \        p
   v  |(a) \       e
(y)e  |angle\      e
   m  |      \     d
   e  |       \
   n  |        \
   t  |         \
      |__________\
      x movement
        (x)

শত্রুটির গতি যদিও তত দ্রুত এবং আপনি নির্ধারণ করতে পারেন যে তাদের x দিকের দিকে কতটা স্থানান্তরিত করা উচিত এবং কোণের পাপ বা মহাকাশ গ্রহণ করে এবং গতিবেগে গুণক দ্বারা তারা y দিকের দিকে কতটা অগ্রসর হবে। কারণ...

 sin(a) = x / speed

তাই:

 x = speed * sin(a)

এবং:

cos(a) = y / speed

তাই:

y = speed * cos(a)

আপনার উদাহরণে moveForward(90)উত্পাদ হবে speed * sin(90)বা speed * 1এক্স দিক এবং speed * cos(90)বা 0Y দিক (এটা ডানদিকে সরানো উচিত আপনার নির্দিষ্ট করা)। এটি আপনাকে প্রাথমিক অর্থে শুরু করা উচিত।

এটিকে সাধারণ করা:

moveForward(float angle)
{
    x += speed * sin(angle);
    y += speed * cos(angle);
}

আহ, আমি কল্পনা করা থেকে অনেক সহজ, অনেক ধন্যবাদ :)
শন ওয়াইল্ড

আমি নিশ্চিত যে আপনার y এবং x এর পরিবর্তন করতে হবে pretty sin (আলফা) = খ / সি।
jcora

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

আমি আমার মোবাইল ফোনে আছি তাই এটির ব্যাখ্যা করা বেশ শক্ত। আমি স্রেফ সূত্রগুলি দিয়ে স্কিম করেছি ...
jcora

এটি একটি দুর্দান্ত ত্রিভুজ যা আপনি সেখানে পেয়েছেন। +1
ব্রো কেভিন ডি

3

অন্য উত্তরটি এখনই ভুল, আপনি নিম্নলিখিতটি ঘোরানোর উপর ভিত্তি করে বিমানের সাথে সঠিকভাবে সরে যেতে:

posX += Math.cos(rotation) *  forwardSpeed + Math.sin(rotation) * strafeSpeed;
posY -= -Math.cos(rotation) * strafeSpeed + Math.sin(rotation) * forwardSpeed;

তবে আমি কোস / পাপের জন্য একটি ভেরিয়েবল তৈরি করার প্রস্তাব দিচ্ছি যা আপনি কেবল তখনই আপডেট করবেন যখন ঘূর্ণনটি পরিবর্তিত হয় আপনি 4 বার টিক দিয়ে গণনা করছেন না।

আপনার ঘোরার সাথে সামনের দিকে এগিয়ে যাওয়ার জন্য স্ট্র্যাপস্পিডটি এক পাশ থেকে অন্যদিকে চলবে।

সম্পাদনা: টেসেলোড একই কাজটি করে তবে তার পাশের চলাফেরা না করা।


2

আপনি আপডেট টিক্স বলেছেন, তাই আমি ধরে নিচ্ছি আপনার কাছে ভেরিয়েবল ফ্রেম রেট নেই। যদি তাই:

এক্স + = গতি * গণিত কোড (কোণ)

y + = গতি * গণিত.সিন (কোণ)

আপনি যদি ভেরিয়েবল ফ্রেম রেট ব্যবহার করেন তবে আপনার ডেল্টা সময় দিয়েও গুণ করতে হবে।

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