#c #embedded #system
#c #встроенный #система
Вопрос:
Я пытаюсь запрограммировать игровой клон, используя ЖК-экран платы разработки микроконтроллера. Я решил использовать плиточный подход, поскольку утилиты LCD позволяют мне размещать отдельные пиксели. У меня есть свои плитки, определенные как двумерные массивы в отдельном заголовочном файле. Каждая запись в массиве представляет цвет этого пикселя с этим индексом [y] [x] .
#define TILE_SIZE 4 \ px
unsigned short TILE[TILE_SIZE][TILE_SIZE] = {
{ Green, Green, Green, Green },
{ Green, Green, Green, Green },
{ Green, Green, Green, Green },
{ Green, Green, Green, Green }
};
В моем основном файле я определил структуру плитки следующим образом
struct Tile {
unsigned short width; // width of tile
unsigned short height; // height of tile
unsigned short pixels[][TILE_SIZE];
unsigned short x; // x-coordinate to begin drawing
unsigned short y; // y-coordinate to begin drawing
};
Я не совсем уверен, как сохранить данные в массиве ПЛИТОК в массив pixels[][] структуры sprite. Я считаю, что по ссылке было бы лучше избежать избыточного использования памяти, но я считаю, что вы не можете передавать 2d-массивы по ссылке. Структура плитки передается render_sprite
функции позже в коде, который перебирает массив и отображает каждый пиксель. Я бы хотел, чтобы эта render_sprite
функция была универсальной, поэтому я стараюсь избегать render_sprite(unsigned short pixels[][4])
Любая помощь будет оценена.
Комментарии:
1. Конечно, вы можете передавать 2d-массивы по адресу. На самом деле вы не можете передавать массивы по значению в C, если они не являются частью структуры, передаваемой по значению. Итак, я не уверен, в чем здесь проблема?
Ответ №1:
Вы можете просто передать указатель на свою Tile
структуру, например render_sprite(Tile* tile)
. Структура содержит всю необходимую информацию (ширину и высоту), чтобы полностью описать размер базового массива пикселей.