CodeGym /Java Blog /यादृच्छिक /CodeGym वर गेम विभाग: इव्हेंट हाताळणी
John Squirrels
पातळी 41
San Francisco

CodeGym वर गेम विभाग: इव्हेंट हाताळणी

यादृच्छिक या ग्रुपमध्ये प्रकाशित केले
CodeGym मधील "गेम" हा एक नवीन विभाग आहे ज्यामध्ये मोठ्या मनोरंजक कार्ये आहेत जिथे तुम्ही लोकप्रिय गेमच्या तुमच्या स्वतःच्या आवृत्त्या तयार करता. हे सोपे आहे: प्रत्येक गेम प्रोजेक्ट सबटास्कमध्ये विभागलेला आहे. त्यांना एक एक करून पूर्ण करा आणि खेळ झाला. तुम्ही ते सोशल नेटवर्क्सवर शेअर करू शकता आणि तुमच्या मित्रांना खेळण्यासाठी आमंत्रित करू शकता. या लेखात, आम्ही गेम लिहिण्यासाठी वापरल्या जाणार्‍या इव्हेंट हाताळणीCodeGym वर "गेम्स" विभाग: इव्हेंट हाताळणी - 1 पद्धतींचे तपशीलवार वर्णन करू .

1. माउससह कार्य करणे

गेम इंजिनमध्ये माउससह कार्य करण्याच्या दोन पद्धती आहेत:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);

तुम्ही या पद्धती तुमच्या वर्गात वारसा म्हणून घोषित करा Gameआणि तुम्हाला हवा असलेला कोणताही कोड जोडा. जेव्हा वापरकर्ता माउस बटणे क्लिक करतो तेव्हा गेम इंजिन त्यांना कॉल करेल.
  1. onMouseLeftClick(int x, int y)— जेव्हा डावे माउस बटण क्लिक केले जाते तेव्हा इंजिनद्वारे कॉल केले जाते. त्याचे पॅरामीटर्स प्ले फील्डच्या सेलचे निर्देशांक आहेत जिथे क्लिक झाले. वरच्या डाव्या सेलमध्ये निर्देशांक आहेत (0, 0). ही पद्धत वापरण्यासाठी तुम्हाला ओव्हरराइड करणे आवश्यक आहे.

  2. onMouseRightClick(int x, int y)— उजवे माऊस बटण क्लिक केल्यावर कॉल केले जाते. ही पद्धत पद्धतीप्रमाणे कार्य करते onMouseLeftClick(int x, int y).

या पद्धती वापरण्याचे येथे एक उदाहरण आहे:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onMouseLeftClick(int x, int y) {
        // Set "X" in the cell where the left mouse click occurred
        setCellValue(x, y, "X");
    }

    @Override
    public void onMouseRightClick(int x, int y) {
        // Clear the cell where the right mouse click occurred
        setCellValue(x, y, "");
    }
}

2. कीबोर्डसह कार्य करणे

कीबोर्डसह कार्य करण्यासाठी गेम इंजिनमध्ये दोन पद्धती आहेत:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);

वापरकर्त्याने की दाबल्यावर तुम्हाला काही घडावे असे वाटत असल्यास, गेमचा वारसा मिळालेल्या या पद्धती तुमच्या वर्गात घोषित करा आणि त्यात तुमचा कोड जोडा. जेव्हा वापरकर्ता की दाबतो किंवा सोडतो तेव्हा गेम इंजिन त्यांना कॉल करेल.
  1. onKeyPress(Key key)- कोणतीही कळ दाबल्यावर कॉल केला जातो. की पॅरामीटर दाबलेली की (किंवा Key.UNKNOWN) आहे.

  2. onKeyReleased(Key key)- कोणतीही की सोडल्यावर कॉल केला जातो. की पॅरामीटर संबंधित की (किंवा Key.UNKNOWN) आहे.

या पद्धती वापरण्याचे येथे एक उदाहरण आहे:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onKeyPress(Key key) {
        // When the space bar is pressed, the center cell turns yellow
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.YELLOW);
        }
    }

    @Override
    public void onKeyReleased(Key key) {
        // When the space bar is released, the center cell changes back to white
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.WHITE);
        }
    }
}
महत्वाचे! गेम इंजिनच्या वर्तमान आवृत्तीमध्ये, की प्रकारात नऊ मूल्यांचा मर्यादित संच आहे:
मूल्य वापरकर्त्याने की दाबली
की.एंटर वापरकर्त्याने एंटर दाबले
की.ESCAPE वापरकर्त्याने Esc दाबले
की.पॉज वापरकर्त्याने विराम दाबला
की.स्पेस वापरकर्त्याने स्पेस दाबले
की.लेफ्ट वापरकर्त्याने डावी बाण की दाबली
की.राईट वापरकर्त्याने उजवी बाण की दाबली
की.यूपी वापरकर्त्याने अप अॅरो की दाबली
की.डाउन वापरकर्त्याने डाउन की दाबली
की.अज्ञात वापरकर्त्याने वरील व्यतिरिक्त एक की दाबली

3. टाइमरसह कार्य करणे

बरेच गेम रिअल टाइममध्ये घडतात, म्हणजे वापरकर्त्याने काहीही केले नाही तरीही गेममध्ये घटना घडतात. तुम्हाला अशा गेमची अंमलबजावणी करण्यास सक्षम करण्यासाठी, आम्ही गेम इंजिनमध्ये टायमर जोडला आहे. हे असे काहीतरी कार्य करते: तुम्ही टाइमर चालू करा आणि टाइमर मध्यांतर सेट करा. उदाहरणार्थ, 500 मिलीसेकंद. त्यानंतर, प्रत्येक अर्धा सेकंद गेम इंजिन onTurnTimer()पद्धत कॉल करते. पुन्हा पुन्हा कायमचे — टाइमर बंद होईपर्यंत. मग तुम्ही टायमर कसा वापराल?
  1. टायमर चालू करा.

    हे करण्यासाठी, एक विशेष पद्धत आहे. ही पद्धत वितर्क म्हणून कॉल्समधील अंतर मिलिसेकंदमध्ये घेते (1 मिलीसेकंद = 1/1000 सेकंद). तुम्हाला फक्त एकदाच कॉल करणे आवश्यक आहे, आणि गेम इंजिन प्रत्येक वेळी Ms मिलीसेकंदांनी पद्धत कॉल करणे सुरू करेल.void setTurnTimer(int timeMs)onTurn()

  2. onTurn(int) पद्धत ओव्हरराइड करा.

    हे करण्यासाठी, तुम्हाला वारसा मिळालेल्या वर्गातील पद्धत घोषित करणे आवश्यक आहे . ही पद्धत गेम इंजिनद्वारे कॉल केली जाईल. इतकेच काय, प्रत्येक कॉलसह गेम इंजिन कॉलसाठी अनुक्रमिक अभिज्ञापक (1, 2, 3, …) पद्धतीकडे जाईल.void onTurn(int step)Game

  3. टाइमर बंद करा.

    टाइमरची यापुढे आवश्यकता नसल्यास, उदाहरणार्थ, वापरकर्त्याने गेम पूर्ण केल्यावर, तुम्ही तो बंद करू शकता. हे करण्यासाठी, आपल्याला फक्त पद्धत कॉल करण्याची आवश्यकता आहे.stopTurnTimer()

  4. टाइमर वेग वाढवा किंवा बदला.

    काही गेममध्ये, ज्या दराने घटना घडतात त्याचा वेग सतत वाढत असतो, त्यामुळे आमच्या टाइमरचा वेग वाढवणे (कॉल्समधील वेळ कमी करणे) सोयीचे असते. काहीही सोपे असू शकत नाही: setTurnTimer(int timeMs)पुन्हा एकदा नवीन मूल्यासह कॉल करा आणि कॉलमधील वेळ onTurn()बदलेल.

उदाहरणार्थ:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    …
    @Override
    public void initialize() {
    	// Create a playing field that is 3 cells x 3 cells
        setScreenSize(3, 3);
        showGrid(false);
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

        setTurnTimer(500);   // Turn on the timer, the interval between calls is 500ms.
    }

    @Override
    public void onTurn(int step) {
        if(step == 100) {
            stopTurnTimer();  // If 100 calls have been made, turn off the timer
        }

        if (step % 2 == 1) {
            // If this call is odd, set the cell background to red
            setCellColor(1, 1, Color.RED);
        } 
        else {
            // If this call is even, set the cell background to blue
            setCellColor(1, 1, Color.BLUE);

        }
    }
    …
}
या साध्या उदाहरणात, आम्ही 3 सेल x 3 सेल असे फील्ड तयार केले आहे. मग आम्ही एक टाइमर सुरू केला जो प्रत्येक अर्ध्या सेकंदाला पद्धत कॉल करेल onTurn(). प्रत्येक अर्ध्या सेकंदाला, सेलचा रंग बदलेल, परंतु त्याची सामग्री बदलणार नाही. 50 सेकंदांनंतर, रंग यापुढे बदलणार नाही. आतासाठी एवढेच! तुम्हाला "गेम" विभागाबद्दल अधिक जाणून घ्यायचे असल्यास, येथे काही उपयुक्त दस्तऐवज आहेत जे मदत करू शकतात:
टिप्पण्या
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION