इनपुट सपोर्ट

कई ChromeOS डिवाइसों में टच स्क्रीन होती हैं. हालांकि, बड़ी स्क्रीन वाले इन डिवाइसों पर गेम खेलने का सबसे अच्छा अनुभव, अक्सर माउस, कीबोर्ड, और गेमपैड से मिलता है. मोबाइल गेमिंग की दुनिया में, अक्सर टच का इस्तेमाल किया जाता है. इसलिए, यह सोचना ज़रूरी है कि टच का इस्तेमाल न करने वाले लोगों को बेहतर अनुभव कैसे दिया जाए.

सबसे पहले, कीबोर्ड, माउस, और गेम कंट्रोलर की सुविधा जोड़ने के सबसे सही तरीके देखें. आपको ऐसे मामलों पर खास ध्यान देना होगा जहां उपयोगकर्ता कुंजियों को दबाकर रखते हैं या एक साथ कई कुंजियों को दबाते हैं.

टचस्क्रीन वाले Chromebook पर टच करके कार्रवाई की जा सकती है. हालांकि, बेहतर अनुभव के लिए, फ़िज़िकल कंट्रोल भी शामिल करना ज़रूरी है. उदाहरण के लिए, व्यू को अडजस्ट करने या निशाना लगाने के लिए माउस का इस्तेमाल करना बेहतर होता है. हालांकि, कार्रवाई करने के लिए माउस का इस्तेमाल करना ज़रूरी नहीं होना चाहिए. अगर किसी मोबाइल गेम में स्क्रीन पर मौजूद मेन्यू में, उपयोगकर्ता को अपने अंगूठे से बटन दबाकर टॉर्च, तलवार या ढाल का इस्तेमाल करने की सुविधा मिलती है, तो उसे माउस से इन बटन पर क्लिक करने के लिए कहना, खराब अनुभव देगा. इसके बजाय, कीबोर्ड की कुंजियों को हर कार्रवाई को ट्रिगर करने के लिए असाइन किया जाना चाहिए. इसके लिए, onKeyUp या onKeyDown को बदलें. जानकारी और कोड के लिए, इनपुट के साथ काम करने वाला पेज देखें.

माउस कैप्चर

फ़र्स्ट पर्सन व्यू वाले गेम, डेस्कटॉप पर सबसे अच्छे दिखते हैं. हालांकि, इसके लिए माउस कैप्चर की सुविधा चालू होनी चाहिए. इससे माउस पॉइंटर छिप जाता है. साथ ही, उपयोगकर्ता को माउस का इस्तेमाल करके, व्यू पॉइंट को मूव करने, निशाना लगाने, चलाने वगैरह की सुविधा मिलती है. यहां माउस कैप्चर करने का एक बुनियादी डेमो दिया गया है. इसमें, उपयोगकर्ता के text_clickme नाम के टेक्स्ट व्यू पर क्लिक करने के बाद, पॉइंटर की पोज़िशन और बटन की स्थितियां रिकॉर्ड की जाती हैं. ज़्यादा जानकारी के लिए, Android का पॉइंटर कैप्चर करने से जुड़ा दस्तावेज़ देखें.

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)
    }
}

चैट

मल्टीप्लेयर गेम में चैट की सुविधाएँ एक अहम कॉम्पोनेंट हो सकती हैं. थोड़ा समय निकालकर यह सोचें कि गेम खेलते समय, उपयोगकर्ता आपके गेम की चैट सुविधा के साथ कैसे इंटरैक्ट करेंगे. खास तौर पर, अगर वे कीबोर्ड से खेल रहे हैं, तो उन्हें चैट ऐक्सेस करने या मैसेज भेजने के लिए, माउस या टचस्क्रीन का इस्तेमाल नहीं करना चाहिए.

एक पैटर्न यह हो सकता है कि कीबोर्ड की कोई कुंजी, चैट बॉक्स पर फ़ोकस करे और मैसेज भेजने के लिए Enter कुंजी का इस्तेमाल करे.

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)
  }
}

Android इनपुट कंपैटबिलिटी पेज पर, कीबोर्ड का दस्तावेज़ देखें.

स्टाइलस इस्तेमाल किया जा सकता है

ड्रॉइंग ऐप्लिकेशन और स्वाइप करके खेले जाने वाले गेम, ChromeOS डिवाइसों पर स्टाइलस का इस्तेमाल कर सकते हैं. ज़्यादा जानकारी के लिए, स्टाइलस इनपुट पेज देखें.

गेम कंट्रोलर

Chromebook पर, चार गेम कंट्रोलर तक इस्तेमाल किए जा सकते हैं. डेवलपर को, इन कंट्रोलर के साथ काम करने के लिए, Android के स्टैंडर्ड गेम कंट्रोलर एपीआई का इस्तेमाल करना चाहिए.

बटन को सामान्य मैपिंग के हिसाब से, सामान्य वैल्यू पर मैप किया जाता है. हालांकि, सभी गेम कंट्रोलर बनाने वाली कंपनियां, मैपिंग के एक जैसे नियमों का पालन नहीं करती हैं. उपयोगकर्ताओं को कंट्रोलर मैपिंग के अलग-अलग लोकप्रिय विकल्प चुनने की अनुमति देने से, उन्हें बेहतर अनुभव मिल सकता है.