
1. Fare ile çalışma
Oyun motorunun fare ile çalışmak için iki yöntemi vardır:-
void onMouseLeftClick(int x, int y);
-
void onMouseRightClick(int x, int y);
Game
ve onlara istediğiniz herhangi bir kodu eklersiniz. Kullanıcı fare düğmelerini tıkladığında oyun motoru onları arayacak.
-
onMouseLeftClick(int x, int y)
— farenin sol düğmesine tıklandığında motor tarafından çağrılır. Parametreleri, tıklamanın meydana geldiği oyun alanı hücresinin koordinatlarıdır. Sol üst hücrenin koordinatları vardır (0, 0). Kullanmak için bu yöntemi geçersiz kılmanız gerekir. -
onMouseRightClick(int x, int y)
— farenin sağ tuşu tıklandığında çağrılır. Bu yöntem, yöntem gibi çalışıronMouseLeftClick(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. Klavye ile çalışma
Oyun motorunun klavyeyle çalışmak için iki yöntemi vardır:-
void onKeyPress(Key key);
-
void onKeyReleased(Key key);
-
onKeyPress(Key key)
— herhangi bir tuşa basıldığında çağrılır. Anahtar parametresi, basılan tuştur (veya Key.UNKNOWN). -
onKeyReleased(Key key)
— herhangi bir tuş serbest bırakıldığında çağrılır. Anahtar parametresi karşılık gelen anahtardır (veya 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);
}
}
}
Önemli! Oyun motorunun mevcut sürümünde, Anahtar türünün sınırlı sayıda dokuz değeri vardır:Değer | Kullanıcı tarafından basılan tuş |
---|---|
Tuş.ENTER | Kullanıcı Enter'a bastı |
Key.ESCAPE | Kullanıcı Esc'ye bastı |
Tuş.PAUSE | Kullanıcı Duraklat'a bastı |
Tuş.BOŞLUK | Kullanıcı Space'e bastı |
Tuş.SOL | Kullanıcı sol ok tuşuna bastı |
Tuş. SAĞ | Kullanıcı sağ ok tuşuna bastı |
Tuş.YUKARI | Kullanıcı yukarı ok tuşuna bastı |
AŞAĞI | Kullanıcı aşağı tuşuna bastı |
Key.BİLİNMİYOR | Kullanıcı yukarıdakilerden farklı bir tuşa bastı |
3. Zamanlayıcı ile çalışma
Pek çok oyun gerçek zamanlı olarak gerçekleşir, yani kullanıcı hiçbir şey yapmasa bile oyunda olaylar devam eder. Bu tür oyunları uygulayabilmeniz için oyun motoruna bir zamanlayıcı ekledik. Şöyle çalışır: zamanlayıcıyı açar ve zamanlayıcı aralığını ayarlarsınız. Örneğin, 500 milisaniye. Ardından, oyun motoru her yarım saniyede bironTurnTimer()
yöntemi çağırır. Sonsuza dek tekrar tekrar - zamanlayıcı kapatılana kadar. Peki zamanlayıcıyı nasıl kullanıyorsunuz?
-
Zamanlayıcıyı açın.
Bunu yapmak için özel bir yöntem var . Yöntem, aramalar arasındaki aralığı milisaniye cinsinden (1 milisaniye = 1/1000 saniye) bağımsız değişken olarak alır. Onu yalnızca bir kez çağırmanız yeterlidir ve oyun motoru her milisaniyede bir yöntemi çağırmaya başlar.
void setTurnTimer(int timeMs)
onTurn()
-
onTurn(int) yöntemini geçersiz kılın.
Bunu yapmak için, sınıfta miras alan bir yöntem bildirmeniz gerekir . Bu yöntem oyun motoru tarafından çağrılacaktır. Dahası, her çağrıda oyun motoru, yönteme çağrı için sıralı bir tanımlayıcı (1, 2, 3, …) iletecektir.
void onTurn(int step)
Game
-
Zamanlayıcıyı kapatın.
Zamanlayıcıya artık ihtiyaç duyulmuyorsa, örneğin kullanıcı oyunu tamamladığında zamanlayıcıyı kapatabilirsiniz. Bunu yapmak için, sadece yöntemi çağırmanız gerekir .
stopTurnTimer()
-
Zamanlayıcıyı hızlandırın veya değiştirin.
Bazı oyunlarda olayların meydana gelme hızı sürekli artıyor, bu nedenle zamanlayıcımızı hızlandırmak (çağrılar arasındaki süreyi azaltmak) uygun olacaktır. Hiçbir şey daha kolay olamazdı:
setTurnTimer(int timeMs)
Yeni bir değerle bir kez daha arayın ve aramalar arasındaki süreonTurn()
değişecektir.
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);
}
}
…
}
Bu basit örnekte, 3 hücre x 3 hücre olan bir alan oluşturduk. Ardından, yöntemi her yarım saniyede bir çağıracak bir zamanlayıcı başlattık onTurn()
. Her yarım saniyede bir hücre rengi değişecek, ancak içeriği değişmeyecektir. 50 saniye sonra renk artık değişmeyecektir. Şimdilik bu kadar! "Oyunlar" bölümü hakkında daha fazla bilgi edinmek istiyorsanız, size yardımcı olabilecek bazı yararlı belgeler aşağıda verilmiştir:
GO TO FULL VERSION