1. Làm việc với chuột
Công cụ trò chơi có hai phương pháp để làm việc với chuột:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
, và viết bất kỳ mã nào vào chúng. Và chính công cụ trò chơi sẽ gọi chúng khi người dùng nhấn nút chuột.
onMouseLeftClick(int x, int y)
— được gọi bởi động cơ khi bạn nhấp vào nút chuột trái. Là đối số, nó nhận tọa độ của ô của sân chơi nơi xảy ra nhấp chuột. Ô trên cùng bên trái có tọa độ (0,0). Để sử dụng phương pháp này, nó phải được ghi đè.onMouseRightClick(int x, int y)
- được gọi khi bạn nhấp chuột phải. Hoạt động tương tự như phương pháponMouseLeftClick(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. Làm việc với bàn phím
Công cụ trò chơi có hai phương pháp để làm việc với bàn phím:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
- được gọi khi nhấn bất kỳ phím bàn phím nào. Giá trị của phím được nhấn (hoặc Key.UNKNOWN) được truyền cho phương thức dưới dạng đối số khóa.onKeyReleased (Key key)
- được gọi khi bất kỳ phím bàn phím nào được thả ra. Đối số khóa lấy giá trị của khóa tương ứng (hoặc 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);
}
}
}
Quan trọng! Trong phiên bản hiện tại của động cơ, loại Khóa chỉ có thể chấp nhận một bộ giá trị giới hạn (9 chiếc):
Nghĩa | Nội dung người dùng đã nhấp vào |
---|---|
Phím.ENTER | Người dùng nhấn nút Enter |
Key.ESCAPE | Người dùng nhấn nút Esc |
Phím.TẠM DỪNG | Người dùng nhấn vào nút Tạm dừng |
Khóa.SPACE | Người dùng nhấn phím cách |
Phím.TRÁI | Người dùng nhấn Mũi tên trái |
Key.RIGHT | Người dùng nhấn mũi tên phải |
Key.UP | Người dùng nhấn Mũi tên lên |
Key.DOWN | Người dùng nhấn Mũi tên xuống |
Key.UNKNOWN | Bất kỳ khóa nào ngoại trừ những khóa được liệt kê ở trên |
3. Làm việc với bộ đếm thời gian
Nhiều trò chơi diễn ra trong thời gian thực, nghĩa là ngay cả khi người dùng không làm gì thì các sự kiện trong trò chơi vẫn được thực thi. Để bạn có thể triển khai những trò chơi như vậy, chúng tôi đã thêm chức năng hẹn giờ vào công cụ phát triển trò chơi. Nó hoạt động như thế này: bạn bật bộ hẹn giờ và đặt khoảng thời gian sau đó nó sẽ tắt. Ví dụ: 500 mili giây. Sau đó, cứ sau nửa giây, Game Engine sẽ gọionTurnTimer()
. Vô số lần cho đến khi bộ hẹn giờ tắt. Làm thế nào để sử dụng bộ đếm thời gian?
-
Bật bộ hẹn giờ.
Có một phương pháp đặc biệt cho việc này
void setTurnTimer(int timeMs)
. Là một đối số, phương thức này lấy khoảng thời gian giữa các cuộc gọi tính bằng mili giây (1/1000 giây). Chỉ cần gọi nó một lần là đủ và công cụ trò chơi sẽ bắt đầu gọi phương thức nàyonTurn()
mỗi lầnM mili giây. -
Ghi đè phương thức onTurn(int).
Để làm được điều này, bạn cần khai báo một phương thức
void onTurn(int step)
trong một lớp được kế thừa từ lớp đóGame
. Phương pháp này sẽ được gọi bởi game engine. Trong trường hợp này, mỗi lần động cơ sẽ chuyển số sê-ri của lệnh gọi đó (1,2,3, ...) sang phương thức. -
Tắt bộ hẹn giờ.
Nếu bộ hẹn giờ không còn cần thiết nữa, chẳng hạn như khi người dùng đã hoàn thành trò chơi, nó có thể bị tắt. Để làm điều này bạn chỉ cần gọi
stopTurnTimer()
. -
Tăng tốc hoặc thay đổi bộ đếm thời gian.
Trong một số trò chơi, các sự kiện liên tục được tăng tốc, vì vậy sẽ rất thuận tiện nếu chúng ta tăng tốc bộ đếm thời gian (giảm thời gian giữa các cuộc gọi). Không có gì đơn giản hơn: gọi
setTurnTimer(int timeMs)
lại, với giá trị mới và thời gian giữa các cuộc gọionTurn()
sẽ thay đổi.
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);
}
}
…
}
Trong ví dụ đơn giản này, chúng tôi đã tạo một trường gồm các ô 3x3. Sau đó, chúng tôi bật bộ hẹn giờ sẽ gọi phương thức này cứ sau nửa giây onTurn()
. Cứ sau nửa giây, màu của ô sẽ thay đổi, nhưng nội dung của ô sẽ không thay đổi. Sau 50 giây màu sẽ ngừng thay đổi. Đó là tất cả! Nếu bạn muốn tìm hiểu thêm về phần Trò chơi, đây là một số tài liệu hữu ích có thể trợ giúp:
GO TO FULL VERSION