Изменение цвета примитивов во время выполнения в Allegro 5
Я пишу редактор 2D-объектов, чтобы быстрее создавать пользовательский интерфейс для базовых программ. Я вообще не использую растровые изображения. Вместо этого я просто рисую примитивы с вызовами функций в игровом цикле. Пока что все было хорошо, но я хотел бы знать, как изменять цвета объектов во время выполнения.
Основная концепция заключается в том, что я использую переменную для цвета, а когда пользователь вызывает функцию, которая изменяет значение этой переменной, она меняет цвет. Просто. Что-то вроде:
void runColor(){
ALLEGRO_COLOR color = NULL;
if(event.mouse.button&1)
color = al_map_rgb(255, 0, 0);
else
color = al_map_rgb(0, 255, 0);
al_draw_filled_rectangle(firstXval, firstYval, secondXval, secondYval, color);
}
К сожалению, это не работает. Когда я использую похожий код, объекты просто не составляются. Там нет ошибок компиляции, нет ошибок во время выполнения, нет ничего. Вместо этого объекты не имеют цвета и поэтому невидимы, хотя я убедился, что они действительно создаются. Ооо, я думаю, это означает, что переменная цвета как-то правильный тип, но не сохраняет значение al_map_rgb()
когда он установлен равным тому, что возвращает эта функция. Я знаю, что это должно что-то возвращать, потому что иначе это не может быть аргументом в al_draw
функции.
Хотя я мог бы просто написать, если еще, если операторы, которые приводят к разным функциям рисования, я бы предпочел просто иметь простой маленький набор кода, как выше, чем набор избыточных вещей, которые решают что-то, что должно быть простым. Я просто предпочел бы не использовать код, эквивалентный клейкой ленте.
Так что я уверен, что проблема, вероятно, связана с моим предположением, что al_map_rgb()
возвращает значение ALLEGRO_COLOR
но я не знаю Ребята, не могли бы вы сделать несколько предложений?
1 ответ
Во-первых, нет необходимости делать какие-либо предположения. Как вы можете видеть в руководстве, al_map_rgb()
действительно возвращает ALLEGRO_COLOR
объект.
Нет ничего плохого в этом кусочке кода. Либо x,y
значения неверны, целевое растровое изображение не соответствует ожидаемому, или вы не вызываете al_flip_display()
, Не забудьте перерисовать всю сцену в каждом кадре (т.е. каждый al_flip_display()
) вызов.
Также при рисовании примитивов убедитесь, что вы понимаете, как работают координаты. При рисовании заполненного прямоугольника вы будете указывать внешние точки (x1,y1)-(x1+w,y1+h)
,