Программирование игр под J2ME: Общий код игрового процесса

Июнь 29th, 2010 от Abizan Оставить ответ »

Сегодня мы начнем писать серию статей по программированию игр для мобильного телефона. В серии будут освещены основные принципы написания игр и работа с классами для создания анимации.

В первой части мы приведем код, общий для типичного игрового процесса.
Ладно, давайте ближе к делу :)

Обычно игра состоит из циклического выполнения какого-то участка кода. Этот участок кода отслеживает значения переменных и обновляет игровое состояние. В зависимости от игрового состояния, код рисует на экране то, что должен увидеть игрок. Значения переменных могут изменяться после взаимодействия игрока с игрой, или если это предусмотрено смыслом игры.

Повторяющийся участок кода помещается в бесконечный цикл (loop или петля), но перед ним ставится проверка, должна ли игра быть запущена. Код в петле должен содержать задержку текущего потока на несколько миллисекунд, чтобы управлять частотой отслеживания игрового состояния, и как часто нужно обновлять изображение на экране.

На языке программирования наша теория выглядит следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// Главный класс
public MainClass {
  private GameCanvas canvas = new MyGameCanvas();


  public MainClass() {
    // запускаем поток для бесконечного выполнения
    canvas.start();
  }
 
  // остальной код
}


// класс для отрисовки экрана
public MyGameCanvas extends GameCanvas implements Runnable {

  private boolean keeprunning;
 
  public MyGameCanvas() {
    // игровой процесс должен выполняться
    keeprunning = true;
  }
 
  public void start() {
    // выполняем инициализацию
   
    // и стартуем новый поток
    Thread runner = new Thread(this);
    runner.start();
  }
 
  private void run() {

    while(keeprunning) {


      // Проверяем, достигла ли игра определенного состояния
      // Или просто какие-то условия
      verifyGameState();


      // Получаем пользовательский ввод
      // Обновляем значения переменных, описывающих игровые объекты

      checkUserInput();


      // Отрисовываем игровые объекты, отражающие процесс игры

      updateGameScreen(getGraphics());


      // Управляем частотой, с которой нужно выполнять тело цикла,
      // и заодно даем выполняться другим потокам

      Thread.sleep(milliseconds);
    }
  }
}

В дальнейшем мы будем придерживаться такой же структуры кода.

Реклама

2 комментариев

  1. А какую среду разработки Вы используете для создания подобных игр?

Добавить комментарий

Копирование материалов сайта допускается только с разрешения администрации сайта.