1. Syçan bilen işlemek
Oýun motorynyň syçan bilen işlemegiň iki usuly bar:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
we olarda islendik kod ýazýarsyňyz. Ulanyjy syçanjygyň düwmelerini basanda oýun motorynyň özi olara jaň eder.
onMouseLeftClick(int x, int y)
- syçanyň çep düwmesine basanyňyzda motor tarapyndan çagyrylýar. Argument hökmünde, basan ýerindäki oýun öýjüginiň koordinatlaryny alýar. Çep ýokarky öýjükde koordinatlar bar (0,0). Bu usuly ulanmak üçin ony ýok etmeli.onMouseRightClick(int x, int y)
- sag düwmä basanyňyzda çagyrylýar. Usula meňzeş işleronMouseLeftClick(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. Klawiatura bilen işlemek
Oýun motorynyň klawiatura bilen işlemegiň iki usuly bar:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
- islendik klawiatura düwmesi basylanda çagyrylýar. Basylan düwmäniň bahasy (ýa-da Key.UNKNOWN) esasy argument hökmünde usula geçýär.onKeyReleased (Key key)
- islendik klawiatura düwmesi çykanda çagyrylýar. Esasy argument, degişli açaryň (ýa-da Key.UNKNOWN) bahasyny alýar.
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);
}
}
}
Möhüm! Dwigateliň häzirki wersiýasynda açar görnüşi diňe çäkli bahalar toplumyny kabul edip biler (9 sany):
Manysy | Ulanyjynyň basan zady |
---|---|
Açar | Ulanyjy Enter düwmesini basdy |
Açar.ESCAPE | Ulanyjy Esc düwmesini basdy |
Açar.PAUSE | Ulanyjy "Pause" düwmesine basdy |
Açar.SPACE | Ulanyjy “Space” -i basdy |
Key.LEFT | Ulanyjy Çep oky basdy |
Düwme | Ulanyjy sag oky basdy |
Key.UP | Ulanyjy Upokarky oky basdy |
Düwme | Ulanyjy aşak oky basdy |
Açar.UNKNOWN | Aboveokarda sanalanlardan başga islendik açar |
3. Taymer bilen işlemek
Köp oýunlar hakyky wagtda bolup geçýär, ýagny ulanyjy hiç zat etmese-de, oýundaky wakalar henizem ýerine ýetirilýär. Şeýle oýunlary durmuşa geçirip bilersiňiz, oýun motoryna taýmer funksiýasyny goşduk. Munuň ýaly bir zat işleýär: taýmeri açyp, öçmeli wagtyny kesgitleýärsiňiz. Mysal üçin, 500 millisekunt. Ondan soň, her ýarym sekuntda Oýun motory jaň edýäronTurnTimer()
. Taymer öçýänçä çäksiz gezek. Taymeri nädip ulanmaly?
-
Hasaplaýjyny açyň.
Munuň üçin ýörite usul bar
void setTurnTimer(int timeMs)
. Argument hökmünde bu usul millisekuntdaky jaňlaryň arasyndaky aralyk dowamlylygyny alýar (sekuntyň 1/1000). Bir gezek jaň etmek ýeterlikdir we oýun dwigatelionTurn()
her gezek millisekuntda usuly çagyryp başlar. -
OnTurn (int) usulyny ýok edýäris.
void onTurn(int step)
Munuň üçin synpdan miras galan synpda usuly yglan etmeliGame
. Bu usul oýun dwigateli tarapyndan atlandyrylar. Bu ýagdaýda hereketlendiriji her gezek şeýle jaňyň seriýa belgisini (1,2,3, ...) usula geçirer. -
Taymeri öçüriň.
Hasaplaýjy indi zerur däl bolsa, mysal üçin, ulanyjy oýny gutaranda, ony öçürip bolýar. Munuň üçin diňe jaň etmeli
stopTurnTimer()
. -
Taýmeri çaltlaşdyryň ýa-da üýtgediň.
Käbir oýunlarda wakalar yzygiderli çaltlaşýar, şonuň üçin taýmerimizi tizleşdirmek amatly bolar (jaňlaryň arasyndaky wagty azaltmak). Has ýönekeý zat ýok:
setTurnTimer(int timeMs)
täzeden baha beriň, täze baha bilen jaňlaryň arasyndaky wagtonTurn()
üýtgär.
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);
}
}
…
}
Bu ýönekeý mysalda 3x3 öýjük meýdany döretdik. Soňra her ýarym sekuntda usuly çagyrjak taýmeri açdyk onTurn()
. Her ýarym sekuntda öýjügiň reňki üýtgär, ýöne mazmuny üýtgemez. 50 sekuntdan soň reňk üýtgemez. Bu hemmesi! Oýunlar bölümi barada has giňişleýin öwrenmek isleseňiz, kömek edip biljek käbir peýdaly resminamalar:
GO TO FULL VERSION