ООП вложение/наследование объектов логики/аппаратной обработки
- Войдите на сайт для отправки комментариев
Делаю подобие игрушки, в основе 2D спрайты, которые движутся по нарисованному фону, каждое отображение спрайта по факту это передача на дисплей растра изображения по SPI DMA из памяти. Не могу сообразить как правильно/логично сделать вложение объектов, вижу несколько вариантов:
1. Сделать начальный класс с примитивами работы с "железом" - передача данных по SPI, каждый следующий класс (спрайт или фон или текстовая надпись) уже наследовать от этого начального класса.
Не очень мне нравиться вариант - хотелось бы отделить логику от "железа".
2. Сделать в main модуле внешние callback функции работы с SPI, в каждом создаваемом объекте прописать void * адрес на нее и соответственно вызывать по мере надобности.
Как то не красиво это будет смотреться в main.cpp :(
Как правильно реализуется подобный механизм?
Не надо ничего наследовать. Объяви экземпляр класса глобальной переменной и всё.
хм....те как то так?:
При инициализации класса передать функцию sendbuffer...
направление понятно, спасибо, буду пробовать.
andycat, а вы обьекты напрямую в дисплей передаете или сначала в буфере в памяти рисуете?
Я бы сделал так - обЪекты рисовал в экранном буфере и сделал независимыми от железа вовсе. А для работы с дисплеем создал отдельный класс, который просто сбрасывал бы в дисплей буфер экрана без оглядки на содержимое
andycat, а вы обьекты напрямую в дисплей передаете или сначала в буфере в памяти рисуете?
в зависимости от ситуации, фоновый рисунок целиком из flash памяти в экран, спрайт сначала в буфер, прозрачный цвет, например 0x0000, заменяю пикселями с фоновой картинки и потом уже буфер в экран.
понятия не имею, как расшифровать эти сочетания букв и цифр
понятия не имею, как расшифровать эти сочетания букв и цифр
объявление глобальных объектов, пока нет полного кода, напишу позже.
Не надо ничего наследовать. Объяви экземпляр класса глобальной переменной и всё.
Удобно, работает, спасибо!
Я бы сделал так - обЪекты рисовал в экранном буфере и сделал независимыми от железа вовсе. А для работы с дисплеем создал отдельный класс, который просто сбрасывал бы в дисплей буфер экрана без оглядки на содержимое
Если дисплей цветной и мега328, то это непозволительно долго для игры :( а небольшие спрайты совсем другое дело.
мега328
у меня STM32F303CCT6, быстродействия более чем достаточно, да и Мега думаю справится, соответственно если хочется чтоб спрайты красиво передвигались, буфер все равно нужен под размер спрайта, еще со времен ZX Spectrum так писалось всегда.
ЗЫ. Впрочем я уже закончил "игрушку", мозг потренировал, птичка весело по экрану за червяком летает, крылышками машет.