Отрисовка спрайта

Программирование игры на Ардуино: движения игрока

В программировании 2D игр, все игровые объекты называются спрайтами. В нашем случае спрайтом будет космолет игрока. Размер спрайта сделаем 5×4.

Спрайт игрока будем хранить в массиве, который определим как глобальную переменную нашей программы. Также нам понадобится изменить начальные координаты игрока, теперь это будут координаты верхнего левого угла спрайта. Наконец, доработаем отрисовку игрока, чтобы вывести на дисплей последовательно все пиксели спрайта.

#include <Adafruit_SSD1306.h>

#define WIDTH 128
#define HEIGHT 64
#define UNIT_WIDTH 5 // ширина спрайта игрока
#define UNIT_HEIGHT 4 // высота спрайта игрока
#define CTRL_TO 50

byte pinLeft = A1;
byte pinRight = A0;

int x,y;
unsigned long t, ctrl_next;

// вот тут то мы и храним спрайт игрока
// размер массива будет равен 5*4 = 20 байт
byte player[UNIT_WIDTH*UNIT_HEIGHT] = {
0,0,1,0,0,
0,1,1,1,0,
0,1,0,1,0,
1,1,0,1,1
};

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

void setup() {
    pinMode( pinLeft, INPUT_PULLUP );
    pinMode( pinRight, INPUT_PULLUP );

    // задаем начальные координаты игрока
    // верхний левый угол спрайта
    x = WIDTH/2-UNIT_WIDTH/2;
    y = HEIGHT-1-UNIT_HEIGHT;
    ctrl_next = millis() + CTRL_TO;

    // инициализация дисплея
    display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
    display.clearDisplay();
}

void loop() {
    unsigned long t = millis();
    if( t > ctrl_next ){
        ctrl_next = t + CTRL_TO;
        // обработка нажатий кнопок
        if( !digitalRead(pinLeft) && x>0 )
            x = x - 1;
        if( !digitalRead(pinRight) && x<WIDTH-1 )
            x = x + 1;
        // очистка фрейма
        display.clearDisplay();
        // отрисовка игрока
        // пробегаемся по всем элементам массива
        // и рисуем соответствующие пиксели во фрейме
        for(byte px=0; px<UNIT_WIDTH; px++)
            for(byte py=0; py<UNIT_HEIGHT; py++)
                display.drawPixel(x+px, y+py, player[px+py*5]);
        // вывод фрейма на дисплей
        display.display();
    }
}

Загружаем на Ардуино. Лучше? На следующем уроке будет еще круче! нарисуем врагов и заставим из двигаться!

Программирование игры Space Invaders, Galaxians на Ардуино

2+

Изменено:

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.