CodeGym/Java Course/All lectures for MR purposes/कार्यक्रम हाताळणी

कार्यक्रम हाताळणी

उपलब्ध

1. परिचय

जर आपण फक्त स्क्रीनवर काहीतरी काढण्यासाठी वापरू शकलो तर गेम इंजिनचा फारसा उपयोग होणार नाही. पूर्ण खेळ लिहिण्यासाठी, आम्हाला वापरकर्त्याशी संवाद साधण्याची आवश्यकता आहे! अधिक अचूक होण्यासाठी, आमच्या प्रोग्रामने वापरकर्त्याच्या क्रियांचा मागोवा घेतला पाहिजे आणि त्यांना प्रतिसाद दिला पाहिजे.

हे करण्यासाठी, CodeGym गेम इंजिनमध्ये विशेष पद्धती आहेत ज्या वापरकर्त्याने माउस बटणे किंवा कीबोर्ड की क्लिक केल्यावर ते कॉल करतात.

वर्गाचा मुद्दा असा आहे की आपण या पद्धती स्वतः लिहा आणि नंतर कोडजिम गेम इंजिन त्यांना कॉल करण्यासाठी जबाबदार आहे. तुम्हाला फक्त तुमच्या कोडमध्ये या पद्धती घोषित करण्याची गरज आहे. हे वाटते त्यापेक्षा हे करणे सोपे आहे.


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

गेम इंजिनमध्ये माउससह कार्य करण्याच्या दोन पद्धती आहेत:

void onMouseLeftClick(int x, int y)
void onMouseRightClick(int x, int y)

तुम्ही या पद्धती तुमच्या स्वतःच्या वर्गात घोषित करा ज्यात Gameवर्गाचा वारसा आहे. आणि मग या पद्धतींमध्ये तुम्हाला हवा तो कोड लिहा. जेव्हा वापरकर्ता माउस बटणे क्लिक करतो तेव्हा गेम इंजिन या पद्धतींना कॉल करेल.

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

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) {
      // Put a "X" in the cell that was clicked with the left mouse button
      setCellValue(x, y, "X");
   }

   @Override
   public void onMouseRightClick(int x, int y) {
      // Clear the cell that was clicked with the right mouse button
      setCellValue(x, y, "");
   }
}

वरील उदाहरणामध्ये, आम्ही दोन्ही पद्धती घोषित केल्या आहेत: onMouseLeftClick()आणि onMouseRightClick(). प्रथम पद्धत कॉल केली जाईल जेव्हा वापरकर्ता खेळण्याच्या क्षेत्रावरील सेलवरील डावे माउस बटण क्लिक करेल. उजव्या माऊस बटणावर क्लिक केल्यावर दुसरी पद्धत कॉल केली जाईल.

युक्तिवाद म्हणून, कोडजिम गेम इंजिन (x, y)खेळण्याच्या क्षेत्राच्या सेलचे निर्देशांक पास करेल जिथे माउस क्लिक केला होता.



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

कीबोर्डसह कार्य करण्यासाठी गेम इंजिनमध्ये दोन पद्धती आहेत:

void onKeyPress(Key key);
void onKeyReleased(Key key);

वापरकर्त्याने की दाबल्यावर तुम्हाला काही करायचे असल्यास, तुम्हाला फक्त या पद्धती तुमच्या वर्गात घोषित कराव्या लागतील ज्या वर्गाचा वारसा घेतात Game.

तुम्ही तुमचा कोड या पद्धतींमध्ये लिहा आणि जेव्हा वापरकर्ता की दाबेल (किंवा रिलीझ करेल) तेव्हा गेम इंजिन त्यांना कॉल करेल.

onKeyPress(Key key)कोणतीही कळ दाबल्यावर कॉल केला जातो . दाबलेल्या कीचे मूल्य (किंवा ) पॅरामीटर म्हणून पद्धतीला दिले जाते . ही पद्धत वापरण्यासाठी, तुम्हाला ती ओव्हरराइड करणे आवश्यक आहे, पद्धतीच्या नावापूर्वी भाष्य ठेवा.Key.UNKNOWNkey@Override

onKeyReleased(Key key)जेव्हा कोणतीही की सोडली जाते तेव्हा कॉल केला जातो . संबंधित की (किंवा) चे मूल्य पॅरामीटरला नियुक्त केले जाते . ही पद्धत वापरण्यासाठी, तुम्हाला ती ओव्हरराइड करणे आवश्यक आहे, पद्धतीच्या नावापूर्वी भाष्य ठेवा.Key.UNKNOWNkey@Override

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

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 spacebar is pressed, the center cell turns yellow
      if (key == Key.SPACE) {
         setCellColor(1, 1, Color.YELLOW);
      }
   }

   @Override
   public void onKeyReleased(Key key) {
      // When the spacebar is released, the center cell returns to white
      if (key == Key.SPACE) {
         setCellColor(1, 1, Color.WHITE);
      }
   }
}


4. सर्व समर्थित की ची यादी

जेव्हा CodeGym इंजिन onKeyPress()आणि onKeyReleased()पद्धतींना कॉल करते, तेव्हा ते त्यांना दाबलेल्या (रिलीझ केलेल्या) कीबद्दल माहिती देते. हे करण्यासाठी, कोडजिम इंजिनमध्ये एक विशेष प्रकार आहे ज्याला म्हणतात Key.

इंजिनच्या वर्तमान आवृत्तीमध्ये, Keyप्रकार केवळ 9 मूल्यांच्या मर्यादित संचाला समर्थन देतो:

मूल्य वापरकर्त्याने काय दाबले
Key.ENTER
वापरकर्त्याने एंटर की दाबली
Key.ESCAPE
वापरकर्त्याने Esc की दाबली
Key.PAUSE
वापरकर्त्याने पॉज की दाबली
Key.SPACE
वापरकर्त्याने स्पेस की दाबली
Key.LEFT
वापरकर्त्याने लेफ्ट अॅरो की दाबली
Key.RIGHT
वापरकर्त्याने उजवी बाण की दाबली
Key.UP
वापरकर्त्याने अप एरो की दाबली
Key.DOWN
वापरकर्त्याने डाउन एरो की दाबली
Key.UNKNOWN
वर सूचीबद्ध केलेल्या व्यतिरिक्त कोणतीही की

प्लेअरने स्पेस बार दाबल्यास, पद्धत पॅरामीटर म्हणून onKeyPress()कॉल केली जाईल . Key.SPACEवापरकर्त्याने डावा बाण दाबल्यास, पॅरामीटर असेल Key.LEFT. वापरकर्त्याने वरील सूचीमध्ये नसलेली कोणतीही की दाबल्यास, पद्धत पॅरामीटर म्हणून onKeyPress()कॉल केली जाईल .Key.UNKNOWN

येथे समस्या अशी आहे की विद्यमान कोडजिम गेम्स फोनवर चालण्यासाठी डिझाइन केले होते. मानक कीबोर्ड ऐवजी, आमच्याकडे 8 आभासी बटणे आहेत:


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

अनेक गेम रिअल टाइममध्ये घडतात, म्हणजे वापरकर्ता कदाचित काहीही करत नाही, परंतु गेममध्ये काही घटना अजूनही घडतात. तुम्हाला अशा गेमची अंमलबजावणी करण्याची परवानगी देण्यासाठी, आम्ही गेम इंजिनमध्ये टाइमर जोडला आहे.

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

तुम्ही टायमर कसा वापरता?

1. टायमर चालू करा

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

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

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

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 3x3 playing field
      setScreenSize(3, 3);
      showGrid(false);
      setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

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

   @Override
   public void onTurn(int step) {
      if (step == 100) {
         stopTurnTimer(); // If this is the 100th callback, then turn off the timer
      }

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

या साध्या उदाहरणात, आम्ही 3 सेल बाय 3 सेल असे फील्ड तयार केले आहे. मग आम्ही एक टाइमर चालू केला जो onTurn()दर अर्ध्या सेकंदाला पद्धत कॉल करेल.

येथे, मध्यवर्ती सेलचा रंग प्रत्येक अर्ध्या सेकंदाला बदलेल. सेलचा मजकूर बदलणार नाही. 50 सेकंदांनंतर (100 कॉलबॅक), रंग बदलणे थांबेल आणि टाइमर बंद होईल.


टिप्पण्या
  • लोकप्रिय
  • नवीन
  • जुने
टिप्पणी करण्यासाठी तुम्ही साईन इन केलेले असणे आवश्यक आहे
या पानावर अजून कोणत्याही टिप्पण्या नाहीत