Настольное приложение Напишите TWAIN небольшое настольное приложение, которое сканирует, загружает в Webapp и открывает окно браузера для добавления метаданных. Плюсы: хороший рабочий процесс, Минусы: один сканер на рабочий стол, и посмотреть, может ли кто-нибудь предложить мне лучший способ сделать это.
В настоящее время у меня есть класс CEngine, который принимает указатели на другие классы, которые ему нужны (например, класс CWindow, класс CEntityManager и т. д.)
У меня есть игровой цикл, который в псевдокоде выглядел бы так (внутри класса CEngine)
while(isRunning) {
Window->clear_screen();
EntityManager->draw();
Window->flip_screen();
// Cap FPS
}
Мой класс CEntityManager выглядел так:
enum {
PLAYER,
ENEMY,
ALLY
};
class CEntityManager {
public:
void create_entity(int entityType); // PLAYER, ENEMY, ALLY etc.
void delete_entity(int entityID);
private:
std::vector entityVector;
std::vector entityVectorIter;
};
А мой класс CEntity выглядел так:
class CEntity() {
public:
virtual void draw() = 0;
void set_id(int nextEntityID);
int get_id();
int get_type();
private:
static nextEntityID;
int entityID;
int entityType;
};
После этого я бы создал классы например, для врага, и дать ему лист спрайтов, его собственные функции и т. д.
Например:
class CEnemy : public CEntity {
public:
void draw(); // Implement draw();
void do_ai_stuff();
};
class CPlayer : public CEntity {
public:
void draw(); // Implement draw();
void handle_input();
};
Все это отлично работало только для рисования спрайтов на экране.
Но потом я пришел к проблема использования функций, которые существуют в одном объекте, но отсутствуют в другом.
В приведенном выше примере псевдокода do_ai_stuff (); and handle_input ();
Как видно из моего игрового цикла,
Это просто итерация по объекту entityVector и вызов метода draw (); функция для каждой сущности - которая работала нормально, поскольку у всех сущностей есть draw (); function.
Но потом я подумал, а что, если это объект игрока, который должен обрабатывать ввод?
Как это работает?
Я не пробовал, но предполагаю, что не могу просто выполнить цикл, как это сделал с функцией draw (), потому что у таких сущностей, как враги, не будет функции handle_input ().
Я мог бы использовать оператор if для проверки entityType, например:
for(entityVectorIter = entityVector.begin(); entityVectorIter != entityVector.end(); entityVectorIter++) {
if((*entityVectorIter)->get_type() == PLAYER) {
(*entityVectorIter)->handle_input();
}
}
Но я не знаю, как люди обычно пишут эти вещи, поэтому я не уверен, как это сделать лучше всего.
I здесь много писали, и я не задавал никаких конкретных вопросов, поэтому поясню, что я ищу здесь:
- Хорошо ли то, как я изложил / разработал свой код, и практично ли это?
- Является ли есть ли для меня более эффективный способ обновления моих сущностей и вызова функций, которые могут отсутствовать у других сущностей?
- Является ли использование перечисления для отслеживания типа сущностей хорошим способом идентификации сущностей?