1. การทำงานกับเมาส์
เอ็นจิ้นเกมมีสองวิธีในการทำงานกับเมาส์:-
void onMouseLeftClick(int x, int y);
-
void onMouseRightClick(int x, int y);
Game
และเพิ่มรหัสที่คุณต้องการ เอ็นจิ้นเกมจะเรียกพวกเขาเมื่อผู้ใช้คลิกปุ่มเมาส์
-
onMouseLeftClick(int x, int y)
— เรียกใช้โดยเครื่องยนต์เมื่อคลิกปุ่มซ้ายของเมาส์ พารามิเตอร์คือพิกัดของเซลล์ของสนามเด็กเล่นที่มีการคลิกเกิดขึ้น เซลล์บนซ้ายมีพิกัด (0, 0) คุณต้องแทนที่วิธีนี้จึงจะใช้งานได้ -
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);
-
onKeyPress(Key key)
- เรียกใช้เมื่อกดปุ่มใด ๆ พารามิเตอร์หลักคือแป้นกด (หรือ Key.UNKNOWN) -
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);
}
}
}
สำคัญ! ในเอ็นจิ้นเกมเวอร์ชันปัจจุบัน ประเภทคีย์มีชุดค่าจำกัดเก้าค่า:ค่า | คีย์กดโดยผู้ใช้ |
---|---|
คีย์.ENTER | ผู้ใช้กด Enter |
คีย์ ESCAPE | ผู้ใช้กด Esc |
คีย์หยุดชั่วคราว | ผู้ใช้กดหยุดชั่วคราว |
คีย์.SPACE | ผู้ใช้กด Space |
กุญแจ ซ้าย | ผู้ใช้กดปุ่มลูกศรซ้าย |
คีย์ขวา | ผู้ใช้กดปุ่มลูกศรขวา |
คีย์ขึ้น | ผู้ใช้กดปุ่มลูกศรขึ้น |
คีย์ลง | ผู้ใช้กดปุ่มลง |
คีย์ไม่รู้จัก | ผู้ใช้กดปุ่มอื่นที่ไม่ใช่ปุ่มด้านบน |
3. การทำงานกับตัวจับเวลา
หลายเกมเกิดขึ้นในเวลาจริง กล่าวคือ แม้ว่าผู้ใช้ไม่ได้ทำอะไรเลย เหตุการณ์ก็ยังคงเกิดขึ้นในเกม เพื่อให้คุณสามารถใช้เกมดังกล่าวได้ เราได้เพิ่มตัวจับเวลาให้กับเอนจิ้นเกม มันทำงานในลักษณะนี้: คุณเปิดตัวจับเวลาและตั้งช่วงเวลาของตัวจับเวลา ตัวอย่างเช่น 500 มิลลิวินาที จากนั้น ทุก ๆ ครึ่งวินาที เอ็นจิ้นเกมจะเรียกใช้onTurnTimer()
เมธอด ครั้งแล้วครั้งเล่าตลอดไป—จนกว่าตัวจับเวลาจะปิด แล้วคุณใช้ตัวจับเวลาอย่างไร?
-
เปิดเครื่องจับเวลา
ในการทำเช่นนี้มี
void setTurnTimer(int timeMs)
วิธี พิเศษ วิธีการใช้เป็นอาร์กิวเมนต์ช่วงเวลาระหว่างการโทรเป็นมิลลิวินาที (1 มิลลิวินาที = 1/1000 วินาที) คุณต้องเรียกใช้เพียงครั้งเดียว และเอ็นจิ้นเกมจะเริ่มเรียกใช้เมธอดonTurn()
ทุก ๆ วินาทีมิลลิวินาที -
แทนที่เมธอด onTurn(int)
ในการทำเช่นนี้ คุณต้องประกาศ
void onTurn(int step)
เมธอดในคลาสที่สืบทอดGame
มา วิธีนี้จะถูกเรียกใช้โดยเกมเอนจิ้น ยิ่งไปกว่านั้น ในการเรียกแต่ละครั้ง เอ็นจิ้นเกมจะส่งตัวระบุลำดับสำหรับการโทรไปยังเมธอด (1, 2, 3, …) -
ปิดตัวจับเวลา
หากไม่ต้องการตัวจับเวลาอีกต่อไป เช่น เมื่อผู้ใช้เล่นเกมเสร็จ คุณสามารถปิดตัวจับเวลาได้ ในการทำเช่นนี้คุณเพียงแค่เรียก
stopTurnTimer()
เมธอด -
เร่งความเร็วหรือเปลี่ยนตัวจับเวลา
ในบางเกม อัตราเหตุการณ์ที่เกิดขึ้นจะเร่งขึ้นอย่างต่อเนื่อง ดังนั้นจึงเป็นการสะดวกที่จะเร่งเวลาของเรา (ลดเวลาระหว่างการโทร) ไม่มีอะไรจะง่ายไปกว่านี้แล้ว: โทร
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 วินาที สีจะไม่เปลี่ยนอีกต่อไป นั่นคือทั้งหมดที่สำหรับตอนนี้! หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับส่วน "เกม" ต่อไปนี้เป็นเอกสารที่มีประโยชน์ซึ่งสามารถช่วยได้:
GO TO FULL VERSION