ইনপুট সমর্থন

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

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

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

মাউস ক্যাপচার

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

class MainActivity : AppCompatActivity() {
    var mouse_x: Float = 0f
    var mouse_y: Float = 0f
    var mouse_left_pressed = false
    var mouse_center_pressed = false
    var mouse_right_pressed = false
    var mouse_scrolling = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        text_clickme.setOnClickListener {
            text_clickme.requestPointerCapture()
        }

        text_clickme.setOnCapturedPointerListener { view, motionEvent ->
            // Get the coordinates required by your app
            mouse_x = motionEvent.x
            mouse_y = motionEvent.y

            when (motionEvent.action) {
                ACTION_DOWN -> {
                    when (motionEvent.buttonState) {
                        BUTTON_PRIMARY -> mouse_left_pressed = true
                        BUTTON_SECONDARY -> mouse_right_pressed = true
                        BUTTON_TERTIARY -> mouse_center_pressed = true
                    }
                    mouse_scrolling = false
                }

                ACTION_CANCEL,
                ACTION_UP -> {
                    when (motionEvent.actionButton) {
                        BUTTON_PRIMARY -> mouse_left_pressed = false
                        BUTTON_SECONDARY -> mouse_right_pressed = false
                        BUTTON_TERTIARY -> mouse_center_pressed = false
                        0 -> {
                            mouse_left_pressed = false
                            mouse_right_pressed = false
                            mouse_center_pressed = false
                        }
                    }
                    mouse_scrolling = false
                }
                ACTION_SCROLL -> {
                    mouse_scrolling = true
                }
                else -> {
                    mouse_scrolling = false
                }
            }

            // Indicate event was consumed
            true
        }
    }

    // Release pointer capture when escape pressed
    override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
        if (keyCode == KEYCODE_ESCAPE) {
            text_clickme.releasePointerCapture()
            return true;
        }
        return super.onKeyUp(keyCode, event)
    }
}

চ্যাট

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

একটি প্যাটার্ন হতে পারে চ্যাট বক্সে একটি কীবোর্ড কী ফোকাস করা এবং বার্তা পাঠানোর জন্য এন্টার কী ব্যবহার করা।

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
  return when(keyCode) {
    KeyEvent.KEYCODE_C -> {
      edittext_chatbox.requestFocus()
      true
    }
    KeyEvent.KEYCODE_ENTER -> {
      submitChatMessage()
      true
    }
    else -> super.onKeyUp(keyCode, event)
  }
}

অ্যান্ড্রয়েড ইনপুট সামঞ্জস্য পৃষ্ঠায় কীবোর্ড ডকুমেন্টেশনটি দেখুন।

স্টাইলাস সাপোর্ট

ChromeOS ডিভাইসে স্টাইলাস ইনপুটের সুবিধা নিতে পারে অঙ্কন অ্যাপ এবং সোয়াইপ-ভিত্তিক গেম। আরও বিস্তারিত জানার জন্য স্টাইলাস ইনপুট পৃষ্ঠাটি দেখুন।

গেম কন্ট্রোলার

Chromebook গুলিতে সর্বাধিক চারটি গেম কন্ট্রোলার সাপোর্ট করে। ডেভেলপারদের এগুলি সাপোর্ট করার জন্য স্ট্যান্ডার্ড অ্যান্ড্রয়েড গেম কন্ট্রোলার API ব্যবহার করা উচিত।

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