দ্রষ্টব্য: আমাকে এপিআই সীমাবদ্ধতার কারণে (এসএফএমএল) কলব্যাক করার চেয়ে পোল করতে হবে। আমি 'শালীন' উপাধির অভাবের জন্যও ক্ষমা চাইছি।
আমার মনে হয় এখানে আমার দুটি প্রশ্ন আছে; আমি যে ইনপুটটি গ্রহণ করছি তা কীভাবে নিবন্ধভুক্ত করব এবং এটি দিয়ে কী করব।
হ্যান্ডলিং ইনপুট
আপনি যে 'এ' কী টিপেছে তা নিবন্ধিত করার পরে, এবং উদাহরণস্বরূপ, কীভাবে সেখান থেকে এটি করবেন সে সম্পর্কে আমি কথা বলছি।
আমি পুরো কীবোর্ডের একটি অ্যারে দেখেছি, এরকম কিছু:
bool keyboard[256]; //And each input loop check the state of every key on the keyboard
তবে এটি অকার্যকর বলে মনে হচ্ছে। উদাহরণস্বরূপ, আপনি কেবল 'এ' কীটিকে 'প্লেয়ার বাম দিকে সরানো' তে সংযুক্ত করছেন, তবে এটি প্রতিটি কী পরীক্ষা করে, 30-60 বার সেকেন্ডে।
আমি তখন অন্য একটি সিস্টেম চেষ্টা করেছি যা এটি চাওয়ার জন্য সন্ধান করেছে।
std::map< unsigned char, Key> keyMap; //Key stores the keycode, and whether it's been pressed. Then, I declare a load of const unsigned char called 'Quit' or 'PlayerLeft'.
input->BindKey(Keys::PlayerLeft, KeyCode::A); //so now you can check if PlayerLeft, rather than if A.
তবে এর সাথে সমস্যা হ'ল আমি এখন কোনও নাম টাইপ করতে পারছি না, উদাহরণস্বরূপ, প্রতিটি একক কীকে আবদ্ধ না করে।
তারপরে, আমার দ্বিতীয় সমস্যা রয়েছে, যার জন্য আমি সত্যিই ভাল সমাধানের কথা ভাবতে পারি না:
ইনপুট প্রেরণ করা হচ্ছে
আমি এখন জানি যে একটি কী টিপানো হয়েছে বা সেই প্লেয়ার লেফটটি সত্য। তবে এখান থেকে কীভাবে যাব?
আমি if(input->IsKeyDown(Key::PlayerLeft) { player.MoveLeft(); }
এই দম্পতিরা সত্তাগুলিতে সর্বাধিক ইনপুটটি পরীক্ষা করার বিষয়ে ভেবেছিলাম
এবং আমি এটি বরং অগোছালো বলে মনে করি। আমি খেলোয়াড়টিকে আপডেট হয়ে গেলে তার নিজস্ব চলাচল পরিচালনা করতে পছন্দ করব। আমি ভেবেছিলাম যে কোনও ধরণের ইভেন্ট সিস্টেম কাজ করতে পারে তবে এটি কীভাবে চলবে তা আমি জানি না। (আমি শুনেছি যে সিগন্যাল এবং স্লটগুলি এই ধরণের কাজের জন্য ভাল ছিল তবে এটি দৃশ্যত খুব ধীর এবং এটি কীভাবে ফিট হবে তা আমি দেখতে পাচ্ছি না)।
ধন্যবাদ।