অ্যান্ড্রয়েড গেম ডেভেলপমেন্ট কিটের গেম অ্যাক্টিভিটি অংশে টেক্সটইনপুট।

GameActivity GameTextInput এর দ্বারা সংহত করে:

  • একটি মোড়ক প্রদান
  • নতুন পাঠ্য ইনপুট ইভেন্ট উপলব্ধতার জন্য একটি পতাকা তৈরি করা
  • সরাসরি টেক্সট বিষয়বস্তুর জন্য GameTextInput এর স্টেট বাফার ব্যবহার করে

নিম্নলিখিত চিত্রে দেখানো হয়েছে, অ্যাপ্লিকেশনগুলি ব্যবহারকারীর পাঠ্য ইনপুট উদ্দেশ্যে বিভিন্ন অভ্যন্তরীণ যৌক্তিক উপাদান ব্যবহার করে:

alt_text

অন্তর্নির্মিত GameTextInput লাইব্রেরি ব্যবহার করার জন্য তিনটি বিস্তৃত পদক্ষেপ রয়েছে:

  • UI-তে নরম কীবোর্ড নিয়ন্ত্রণ করা হচ্ছে
  • নতুন টেক্সট উপলব্ধ যখন জানা
  • ব্যবহারকারীর ইনপুট পাঠ্য এবং এর অবস্থা পুনরুদ্ধার করা হচ্ছে

এই নথির বাকি অংশ বিস্তারিতভাবে তাদের বর্ণনা করে। GameActivity সহ GameTextInput এর উদাহরণের জন্য, গেমস-নমুনা সংগ্রহস্থল দেখুন।

UI-তে নরম কীবোর্ড নিয়ন্ত্রণ করুন

GameActivity UI-তে নরম কীবোর্ড নিয়ন্ত্রণ করতে দুটি ফাংশন প্রদান করে:

তাদের সংজ্ঞার জন্য API রেফারেন্স ডক্স পড়ুন। কীবোর্ড প্রদর্শিত হওয়ার পরে, অ্যাপ্লিকেশনটির UI নিম্নলিখিতগুলির মতো দেখতে হতে পারে:

alt_text

পাঠ্য উপলব্ধতার জন্য পরীক্ষা করুন

নরম কীবোর্ড ইভেন্টগুলি জাভা সাইডের GameTextInput থেকে C/C++ পাশ থেকে JNI-এর মাধ্যমে পাস করা হয়, তারপর GameActivity-এর র‍্যাপার পর্যন্ত ভ্রমণ করে, অবশেষে android_app::textInputState পতাকাটি native_app_glue বাস্তবায়িত হয়। উদ্দেশ্য প্রসেসিং সঞ্চালনের জন্য অ্যাপ্লিকেশনগুলিকে পর্যায়ক্রমে এই পতাকা পোল করা উচিত:

  • GameActivity শুধুমাত্র android_app::textInputState পতাকা সেট করে।
  • অ্যাপ্লিকেশনগুলি পতাকা পোল করে এবং নতুন GameTextInput ইভেন্টগুলি পরিচালনা করে, যেমন ইনপুট বাফারে যোগ করা নতুন পাঠ্য।
  • অ্যাপ্লিকেশনগুলি android_app::textInputState সাফ করে।

মনে রাখবেন android_app::textInputState একক এবং একাধিক পাঠ্য ইনপুট ইভেন্টের মধ্যে পার্থক্য করে না।

একটি সাধারণ উদাহরণের জন্য, অ্যাপ সাইকেল কমান্ড, টাচ ইভেন্ট এবং মূল ইভেন্টগুলি পরিচালনা করার পরে নিম্নলিখিত কোডটি textInputState পতাকা পোল করে:

while (true) {
   // Read all pending events.
   int events;
   struct android_poll_source* source;

   while ((ALooper_pollAll(engine.animating ? 0 : -1, nullptr, &events,
                                 (void**)&source)) >= 0) {
       // Process this event, etc.
       ...
       // Check if we are exiting.
       if (app->destroyRequested != 0) {
           engine_term_display(&engine);
           return;
       }
   }
   engine_handle_input(app);

   // Process text input events if there is any outstanding.
   if (app->textInputState) {
       // process TextInput events.
          ...
       //reset the textInputState flag
       app->textInputState = 0;
   }
   if (engine.animating) {
         // draw frames.
   }
}

ব্যবহারকারীর ইনপুট পাঠ্য পুনরুদ্ধার করুন

ইনপুট টেক্সট এবং অন্যান্য স্টেটগুলি GameTextInput এর অভ্যন্তরীণ বাফার, GameTextInput::currentState_ এ জমা হয়। অ্যাপ্লিকেশনগুলি এর সামগ্রী পুনরুদ্ধার করতে নিম্নলিখিত উপায়গুলির মধ্যে একটি ব্যবহার করতে পারে:

  • GameActivity এর র‍্যাপার API (প্রস্তাবিত)
  • GameTextInput API

GameActivity API সহ TextInput অবস্থা পান

অ্যাপ্লিকেশনগুলি সাধারণ কলব্যাক প্রক্রিয়া সহ বর্তমান পাঠ্য ইনপুট অর্জন করে:

  • টেক্সট ইনপুট ইভেন্ট প্রক্রিয়া করতে GameTextInputGetStateCallback টাইপের একটি কলব্যাক ফাংশন প্রয়োগ করুন।
  • এক বা একাধিক অসামান্য ইভেন্ট থাকলে GameActivity_getInputState() কে কল করুন।
  • ইভেন্টগুলি প্রক্রিয়া করার পরে android_app::textInputState সাফ করুন।

পূর্ববর্তী বিভাগে স্নিপেটটি চালিয়ে, নিম্নলিখিত কোডটি পাঠ্য ইনপুট বাফারের একটি রেফারেন্স অর্জন করে, এটি প্রক্রিয়া করে (দেখানো হয়নি), এবং ইভেন্ট পতাকা পুনরায় সেট করে:

extern "C" void GameTextInputGetStateCB(void *ctx, const struct GameTextInputState *state) {
    auto* engine = (struct engine*)ctx;
    if (!engine || !state) return;

    // Process the text event(s).
    LOGI("UserInputText: %s", state->text_UTF8);

    // Clear the text input flag.
    engine->app->textInputState = 0;
}

পূর্ববর্তী বিভাগে দেখানো গেম লুপে, উপরের পাঠ্য ইনপুট হ্যান্ডলারের সাথে পাঠ্য পরীক্ষা করুন এবং প্রক্রিয়া করুন:

if (state->textInputState) {
    GameActivity_getTextInputState(
        app->activity,
        GameTextInputGetStateCB,  // App's event handler shown above.
        &engine // Context to the GameTextInputGetStateCB function.
    );
}

অ্যাপ্লিকেশনগুলি ঐচ্ছিকভাবে GameActivity_setTextInputState() দিয়ে GameTextInputState বিষয়বস্তু শুরু করতে পারে।

GameTextInput API এর সাথে TextInput অবস্থা পান

বর্তমান GameTextInputState পুনরুদ্ধার করতে অ্যাপ্লিকেশনগুলি সরাসরি GameTextInput API ব্যবহার করতে পারে:

  • GameActivity এর অভ্যন্তরীণ GameTextInput উদাহরণ পেতে GameActivity_getTextInput() ব্যবহার করুন।
  • GameTextInput ইনস্ট্যান্স হাতে নিয়ে, একই GameTextInputState সামগ্রী পেতে GameTextInput_getState() কল করুন।

আবার, মনে রাখবেন যে অ্যাপ্লিকেশনগুলিকে সরাসরি GameTextInput শুরু করা উচিত নয়; GameActivity ইতিমধ্যেই এটি শুরু করার প্রক্রিয়ার সময় করে।

কলব্যাক পদ্ধতিটি GameActivity-এর GameActivity_getTextInputState() ফাংশন দ্বারা ব্যবহৃত একই রকম।

তথ্যসূত্র

GameActivity অ্যাপ্লিকেশন তৈরি করার সময় বিকাশকারীরা নিম্নলিখিত সংস্থানগুলিকে সহায়ক মনে করতে পারে:

প্রতিক্রিয়া

GameActivity এবং GameTextInput উভয়ই Jetpack গেম লাইব্রেরির অংশ। যেকোনো সমস্যা এবং প্রশ্নের জন্য, Google IssueTracker-এ একটি বাগ তৈরি করুন।