Warning: Undefined array key 4 in /home/c38942/www.robotclass.ru/www/wp-content/plugins/sgr-nextpage-titles/inc/mpp-template.php on line 73
Warning: Undefined array key "" in /home/c38942/www.robotclass.ru/www/wp-content/plugins/sgr-nextpage-titles/inc/mpp-template.php on line 73
Отрисовка спрайта
В программировании 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();
}
}
Загружаем на Ардуино. Лучше? На следующем уроке будет еще круче! нарисуем врагов и заставим их двигаться!

Все уроки на эту тему:
