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.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.engine.cell.Key;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Устанавливаем размер игрового поля 3x3
setScreenSize(3, 3);
// Закрашиваем игровое поле белым цветом
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) {
// Ставим символ "X" в клетку по которой кликнули левой кнопкой мыши
setCellValue(x, y, "X");
}
@Override
public void onMouseRightClick(int x, int y) {
// Очищаем клетку по которой кликнули правой кнопкой мыши
setCellValue(x, y, "");
}
}
2. การทำงานกับแป้นพิมพ์
เอ็นจิ้นเกมมีสองวิธีในการทำงานกับคีย์บอร์ด:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
— เรียกเมื่อมีการกดแป้นคีย์บอร์ดใดๆ ค่าของคีย์ที่กด (หรือ Key.UNKNOWN) จะถูกส่งผ่านไปยังเมธอดเป็นอาร์กิวเมนต์ของคีย์onKeyReleased (Key key)
— เรียกเมื่อมีการปล่อยแป้นคีย์บอร์ด อาร์กิวเมนต์คีย์รับค่าของคีย์ที่เกี่ยวข้อง (หรือ Key.UNKNOWN)
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.engine.cell.Key;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Устанавливаем размер игрового поля 3x3
setScreenSize(3, 3);
// Закрашиваем игровое поле белым цветом
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) {
// При нажатии пробела, центральная клетка становится желтой
if (key == Key.SPACE) {
setCellColor(1, 1, Color.YELLOW);
}
}
@Override
public void onKeyReleased(Key key) {
// При отпускании пробела, центральной клетке возвращается белый цвет
if (key == Key.SPACE) {
setCellColor(1, 1, Color.WHITE);
}
}
}
สำคัญ! ในเครื่องยนต์เวอร์ชันปัจจุบัน ประเภทกุญแจสามารถรับได้เฉพาะชุดค่าที่จำกัด (9 ชิ้น):
ความหมาย | สิ่งที่ผู้ใช้คลิก |
---|---|
คีย์ ENTER | ผู้ใช้กดปุ่ม Enter |
คีย์.ESCAPE | ผู้ใช้กดปุ่ม Esc |
คีย์. PAUSE | ผู้ใช้คลิกปุ่มหยุดชั่วคราว |
คีย์. SPACE | ผู้ใช้กด Space |
กุญแจซ้าย | ผู้ใช้กดลูกศรซ้าย |
คีย์.ขวา | ผู้ใช้กดลูกศรขวา |
คีย์.อัพ | ผู้ใช้กดลูกศรขึ้น |
คีย์.ลง | ผู้ใช้กดลูกศรลง |
คีย์ UNKNOWN | คีย์ใดๆ ยกเว้นคีย์ที่ระบุไว้ข้างต้น |
3. การทำงานกับตัวจับเวลา
เกมจำนวนมากเกิดขึ้นแบบเรียลไทม์ ซึ่งหมายความว่าแม้ว่าผู้ใช้จะไม่ทำอะไรเลย เหตุการณ์ในเกมก็ยังคงดำเนินอยู่ เพื่อให้คุณสามารถใช้งานเกมดังกล่าวได้ เราได้เพิ่มฟังก์ชันจับเวลาให้กับเอ็นจิ้นเกม มันทำงานดังนี้: คุณเปิดเครื่องจับเวลาและตั้งระยะเวลาที่ควรดับลง เช่น 500 มิลลิวินาที หลังจากนั้นทุกๆ ครึ่งวินาที Game Engine จะเรียกไฟล์onTurnTimer()
. จำนวนครั้งไม่สิ้นสุดจนกว่าจะปิดตัวจับเวลา จะใช้ตัวจับเวลาได้อย่างไร?
-
เปิดเครื่องจับเวลา
มีวิธีพิเศษสำหรับสิ่ง
void setTurnTimer(int timeMs)
นี้ สำหรับอาร์กิวเมนต์ วิธีการนี้จะใช้ระยะเวลาระหว่างการโทรในหน่วยมิลลิวินาที (1/1000 วินาที) การเรียกมันเพียงครั้งเดียวก็เพียงพอแล้ว และเอ็นจิ้นเกมจะเริ่มเรียกเมธอดนี้onTurn()
ทุกๆ มิลลิวินาที -
แทนที่เมธอด onTurn(int)
เมื่อต้องการทำเช่น นี้คุณต้องประกาศวิธีการ
void onTurn(int step)
ในคลาสที่สืบทอดมาจากคลาสGame
วิธีการนี้จะถูกเรียกโดยเอ็นจิ้นเกม ในกรณีนี้ เอ็นจิ้นจะโอนหมายเลขซีเรียลของการเรียกดังกล่าว (1,2,3, ...) ไปยังเมธอดในแต่ละครั้ง -
ปิดตัวจับเวลา
หากไม่จำเป็นต้องใช้ตัวจับเวลาอีกต่อไป เช่น เมื่อผู้ใช้เล่นเกมจบแล้วก็สามารถปิดได้ ในการดำเนินการนี้คุณเพียงแค่ต้องโทรไป
stopTurnTimer()
ที่ -
เร่งความเร็วหรือเปลี่ยนตัวจับเวลา
ในบางเกม กิจกรรมจะเร่งความเร็วอย่างต่อเนื่อง ดังนั้นจึงสะดวกที่จะเร่งความเร็วตัวจับเวลา (ลดเวลาระหว่างการโทร) ไม่มีอะไรง่ายไปกว่า: โทร
setTurnTimer(int timeMs)
อีกครั้งด้วยค่าใหม่ และเวลาระหว่างการโทรonTurn()
จะเปลี่ยนไป
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
public class MySuperGame extends Game {
…
@Override
public void initialize() {
// Создаем игровое поле 3x3 клетки
setScreenSize(3, 3);
showGrid(false);
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
setTurnTimer(500); //Включаем таймер, интервал между вызовами – 500мс.
}
@Override
public void onTurn(int step) {
if(step == 100) {
stopTurnTimer(); // если прошло 100 тактов, выключаем таймер
}
if (step % 2 == 1) {
// Если данный такт нечётный, установить клетке красный фон
setCellColor(1, 1, Color.RED);
} else {
//если данный такт чётный, установить клетке синий фон
setCellColor(1, 1, Color.BLUE);
}
}
…
}
ในตัวอย่างง่ายๆ นี้ เราได้สร้างฟิลด์ที่มีเซลล์ขนาด 3x3 จากนั้นเราก็เปิดเครื่องจับเวลาที่จะเรียกเมธอดทุกๆ ครึ่งonTurn()
วินาที ทุกครึ่งวินาทีสีของเซลล์จะเปลี่ยน แต่เนื้อหาจะไม่เปลี่ยนแปลง หลังจากผ่านไป 50 วินาที สีจะหยุดเปลี่ยน นั่นคือทั้งหมด! หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับส่วนเกม นี่คือเอกสารที่เป็นประโยชน์บางส่วนที่สามารถช่วยได้:
GO TO FULL VERSION