আপনি একটি স্থিতিশীল UI শ্রেণীর সাথে ভুল পদ্ধতি গ্রহণ করছেন। স্ট্যাটিক কলব্যাক থেকে একটি ইভেন্ট ফাংশনে "বাউন্স" করার স্বাভাবিক উপায় হ'ল স্থির কলব্যাক থেকে অ্যাক্সেসযোগ্য এমন জায়গায় লাফিয়ে উঠতে সক্ষম এমন কিছু সঞ্চয় করা।
জিএলএফডাব্লু এবং নেটিভ উইন 32 এর মতো বেশিরভাগ এপিআইগুলিকে এই ধরণের স্ট্যাটিক কলব্যাকের প্রয়োজন হয় উপরের সমিতিটি তৈরি করার একটি উপায় সরবরাহ করে। জিএলএফডাব্লু উইন্ডোতে স্টোরের একটি পয়েন্টার আকারের ব্লক রয়েছে যা আপনি নির্ধারণ করতে পারবেন: ব্যবহারকারী পয়েন্টার । আপনি প্রয়োজন হিসাবে এই ব্যবহারকারী পয়েন্টারটি পেতে বা সেট করতে পারেন ।
খুব সাধারণ প্যাটার্ন হ'ল কিছু ধরণের Game
ক্লাস থাকে যার "হ্যান্ডলকিপ্রিপ (কী কী)" বা হোয়াট নোটের মতো পদ্ধতি রয়েছে। আপনি যখন প্রোগ্রাম শুরু করবেন, আপনি Game
অবজেক্টটি তৈরি করেন এবং আপনার সমস্ত জিএলএফডাব্লু সূচনা করেন, তারপরে Game
পয়েন্টারটি ব্যবহারকারী ডেটা স্টোরেজে স্টাফ করুন :
int main () {
GLFWindow * window = ... create GLFW window ...
Game game(... game constructor parameters ...);
glfwSetWindowUserPointer(window, &game);
... main game loop ...
}
তারপরে, আপনার কীবোর্ড কলব্যাক (এবং অন্যান্য সমস্ত স্ট্যাটিক কলব্যাকস) Game *
ব্যবহারকারীর পয়েন্টার সঞ্চয়স্থান থেকে আনপ্যাক করে এটিকে ফরোয়ার্ড করতে পারে:
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
Game * game = reinterpret_cast<Game *>(glfwGetWindowUserPointer(window);
game->HandleKeyDown(...);
}
প্রয়োজন অনুসারে HandleKeyDown
পদ্ধতিটি Game
আপনার ইউআই অবজেক্টের সাথে প্রেরণ করতে পারে (বা, যদি আপনার কেবলমাত্র ইউআই অবজেক্টের জন্য কীবোর্ড ইনপুট প্রয়োজন হয় তবে আপনি কেবল আপনার স্টোরেজে ইউআই অবজেক্টের জন্য একটি পয়েন্টার স্টাফ করতে পারেন, তবে গেমের মতো কিছু স্টফিং করতে পারেন বা উচ্চ-স্তরের কিছু সাধারণত ভাল যাহেতু আপনার উইন্ডোতে কেবলমাত্র একটি পয়েন্টার ব্যবহার করতে পারেন)।