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.UNKNOWN
key
@Override
onKeyReleased(Key key)
जेव्हा कोणतीही की सोडली जाते तेव्हा कॉल केला जातो . संबंधित की (किंवा) चे मूल्य पॅरामीटरला नियुक्त केले जाते . ही पद्धत वापरण्यासाठी, तुम्हाला ती ओव्हरराइड करणे आवश्यक आहे, पद्धतीच्या नावापूर्वी भाष्य ठेवा.Key.UNKNOWN
key
@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 मूल्यांच्या मर्यादित संचाला समर्थन देतो:
मूल्य | वापरकर्त्याने काय दाबले |
---|---|
|
वापरकर्त्याने एंटर की दाबली |
|
वापरकर्त्याने Esc की दाबली |
|
वापरकर्त्याने पॉज की दाबली |
|
वापरकर्त्याने स्पेस की दाबली |
|
वापरकर्त्याने लेफ्ट अॅरो की दाबली |
|
वापरकर्त्याने उजवी बाण की दाबली |
|
वापरकर्त्याने अप एरो की दाबली |
|
वापरकर्त्याने डाउन एरो की दाबली |
|
वर सूचीबद्ध केलेल्या व्यतिरिक्त कोणतीही की |
प्लेअरने स्पेस बार दाबल्यास, पद्धत पॅरामीटर म्हणून 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 कॉलबॅक), रंग बदलणे थांबेल आणि टाइमर बंद होईल.
GO TO FULL VERSION