Программирование игр под J2ME: Создание фона с помощью TiledLayer

Июль 3rd, 2010 от Abizan Оставить ответ »

Продолжение цикла статей по программированию игр под Java 2 ME. Здесь рассказывается об использовании класса TiledLayer. Мы будем использовать его для рисования фона.

Сейчас мы добавим немного красок в нашу игру :) Мы сделаем фон, состоящий из трех цветов, символизирующих Россию – белый, синий и красный. Нам нужно будет поделить экран на три части и заполнить их картинками с размерами 60×60 пикселя. Благодаря классу TiledLayer можно закрасить большую область маленькими картинками.

Для начала разделим экран на квадратики по 60 на 60 пикселя каждый. Номер каждой колонки и строчки отсчитывается с 0, как показано на рисунке:

Ячейки с (0, 0) по (0, 2) закрасим белым, (1, 0) – (1, 2) – синим, (2, 0) – (2, 2) – красным. Для этого нужно приготовить картинку:

Как видите, первый квадрат – белый, второй – красный, а третий – синий. В классе TiledLayer эти изображения будут нумероваться начиная с 1 (а не с 0, значит белый – 1, красный – 2, синий – 3). TiledLayer возьмет полную картинку и разделит ее на три части. Нам нужен фон с девятью ячейками: 3 на 3, по 60х60 пикселей каждая. Следующий код делает то, что нам надо:

1
2
3
4
// Загружаем картинку с фонами
Image bgImg = Image.createImage("/bg.png");
// Создаем TiledLayer
bg = new TiledLayer(3, 3, bgImg, 60, 60);

Как видите, первые два параметра конструктора указывают размеры фона, следующий – картника, а последние два – размеры каждой ячейки. Этот размер будет использоваться для того, чтобы вырезать ячейки из исходного изображения bgImg.

Все, что нам осталось сделать – это присвоить каждой ячейке соответствующую картинку. Код, приведенный ниже как раз эти и занимается:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void createBg() throws IOException {
    int[] cells = {
        1, 1, 1,
        3, 3, 3,
        2, 2, 2
    };
    for (int i = 0; i < cells.length; i++) {
        int column = i % 3;
        int row = (i - column) / 3;
        bg.setCell(column, row, cells[i]);
    }

    // устанавливаем место размещения фона
    bg.setPosition(0, 0);
}

И не забудьте добавить в процедуру обновления экрана отрисовку фона перед тем, как рисовать все остальное:
bg.paint(getGraphics());

Реклама

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

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