
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 參數是相應的鍵(或 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);
}
}
}
重要的! 在當前版本的遊戲引擎中,Key 類型只有九個值:價值 | 用戶按下的鍵 |
---|---|
鍵.ENTER | 用戶按下 Enter |
鍵.ESCAPE | 用戶按下 Esc |
鍵.PAUSE | 用戶按下暫停 |
鍵空間 | 用戶按下空格鍵 |
鍵.左 | 用戶按下左箭頭鍵 |
鍵.RIGHT | 用戶按下右箭頭鍵 |
鍵.UP | 用戶按下向上箭頭鍵 |
按鍵.DOWN | 用戶按下了向下鍵 |
鑰匙.未知 | 用戶按下了上述以外的鍵 |
3.使用定時器
許多遊戲是實時發生的,即即使用戶什麼都不做,遊戲中仍然會發生事件。為了讓您能夠實現此類游戲,我們在遊戲引擎中添加了一個計時器。它的工作原理是這樣的:你打開定時器並設置定時器間隔。例如,500 毫秒。然後,遊戲引擎每半秒調用一次該onTurnTimer()
方法。永遠一次又一次——直到定時器被關閉。那麼如何使用定時器呢?
-
打開定時器。
為此,有一種特殊的方法。該方法以毫秒為單位的調用間隔作為參數(1 毫秒 = 1/1000 秒)。您只需要調用一次,遊戲引擎將在每 timeMs 毫秒開始調用該方法。
void setTurnTimer(int timeMs)
onTurn()
-
覆蓋 onTurn(int) 方法。
為此,您需要在繼承的類中聲明一個方法。該方法將由遊戲引擎調用。此外,對於每次調用,遊戲引擎都會將調用的順序標識符(1、2、3、...)傳遞給該方法。
void onTurn(int step)
Game
-
關閉定時器。
如果不再需要計時器,例如,當用戶完成遊戲時,您可以將其關閉。為此,您只需調用該方法。
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