В определённых ситуациях Вы можете не захотеть закрасить непосредственно экран, но хотели бы закрасить холст, который может быть использован позже, чтобы закрашивать элементы на экране. Такой холст называется - поверхность. Например, Вы хотите позволить, чтобы пользователь рисовал на экране. Краска не должна быть нарисована на экране (поскольку она будет удаляться каждый следующий шаг), но взамен Вы можете рисовать на отдельной поверхности, которая будет копироваться на экране в каждом шаге. Или Вы хотите использовать текстуру, которая в завершении будет изменяться.
Поверхности делают всё это возможным. Их фактически довольно просто использовать. Вы сначала создаёте поверхность. Затем Вы указываете, что дальнейший рисунок должен случиться на этой поверхности. С того момента на всех функциях рисунка оперируется поверхность. Как только Вы завершили, повторно установите цель рисования и дальнейшее рисование случится на экране снова. Вы можете рисовать поверхность на экране многими различными путями или использовать её как структуру. Отсюда Вы должны уловить несколько вещей. Смотрите замечания в конце.
Для работы с поверхностями существуют следующие функции
surface_create(w,h) Создаёт поверхность, обозначенную шириной и высотой. Возвращает id поверхности, которая должна использоваться во всех дальнейших вызовах. Примечание: эта поверхность не будет очищена. За неё ответственность несёт пользователь. (Установите это как цель и вызывайте подходящую функцию очистки.)
surface_free(id) Освобождает память, используемую поверхностью.
surface_exists(id) Возвращает поверхность с указанным существующим id.
surface_get_width(id) Возвращает ширину поверхности.
surface_get_height(id) Возвращает высоту поверхности.
surface_get_texture(id) Возвращает текстуру, соответствующую поверхности. Это может использоваться, чтобы рисовать текстурные объекты с изображением на поверхности.
surface_set_target(id) Устанавливает указанную поверхность как целевой эскиз. Всё последующее рисование произойдёт на этой поверхности. Это повторно установит проектирование простым охватом поверхности.
surface_reset_target() Повторно устанавливает целевое рисование в обычный экран.
surface_getpixel(id,x,y) Возвращает цвет пикселя, соответствующего позиции (x,y) на поверхности. Это не очень быстро, так что используйте осторожно.
surface_save(id,fname) Сохраняет bmp изображение поверхности в заданном названии. Полезно для получения захватов экрана..
surface_save_part(id,fname,x,y,w,h) Сохраняет часть поверхности в заданном названии.
draw_surface(id,x,y) Рисует поверхность в позиции (x,y). (Без цвета, смешивания и альфа прозрачности.)
draw_surface_stretched(id,x,y,w,h) Рисует поверхность, растянутую к обозначенной области.
draw_surface_tiled(id,x,y) Рисует поверхность плитками так, чтобы они заполнили всю комнату.
draw_surface_part(id,left,top,width,height,x,y) Рисует обозначенную часть поверхности с её началом в позиции (x,y).
draw_surface_ext(id,x,y,xscale,yscale,rot,color,alpha) Рисует поверхность, масштабированную и вращаемую со смешивающимся цветом (используйте c_white, чтобы не было смешивания) и альфа прозрачностью(0-1).
draw_surface_stretched_ext(id,x,y,w,h,color,alpha) Рисует поверхность, протянутую к обозначенной области. color - смешивающийся цвет, и alpha - указывает установку прозрачности.
draw_surface_tiled_ext(id,x,y,xscale,yscale,color,alpha) Рисует поверхность плитками так, чтобы они заполнили всю комнату, но теперь с факторами масштаба и установками прозрачности и цвета.
draw_surface_part_ext(id,left,top,width,height,x,y,xscale,yscale,color,alpha) Рисует обозначенную часть поверхности с её началом в позиции (x,y), но теперь с факторами масштаба и установками прозрачности и цвета.
draw_surface_general(id,left,top,width,height,x,y,xscale,yscale,rot,c1,c2,c3,c4,alpha) Самая важная функция рисования. Это рисует обозначенную часть поверхности с её началом в позиции (x,y), но теперь с факторами масштаба, углом вращения, цветом для каждой из этих четырёх вершин (вверх-влево, вверх-вправо, вниз-вправо и вниз-влево) и величиной альфа прозрачности.
surface_copy(destination,x,y,source) Копирует исходную поверхность в позиции (x,y) в назначаемой поверхности. (Без любой формы смешивания.)
surface_copy_part(destination,x,y,source,xs,ys,ws,hs) Копирует обозначенную часть исходной поверхности в позиции (x,y) в назначаемой поверхности. (Без любой формы смешивания.)
Обратите внимание, что нет никаких функций, чтобы копировать часть экрана к поверхности. (Это невозможно из-за различия форматов между экраном и поверхностями.) Если это требуется, Вы должны установить поверхность, предоставляющую цель и затем рисовать комнату. Вы можете тогда использовать поверхность, копируя подпрограммы для получения требуемых частей.
Обратите внимание, что Вы можете также создать спрайты и фоны из поверхностей. Смотрите секцию об изменении ресурсов для дополнительной информации.
Немного осторожными нужно быть при использовании этих функций. В особенности, пожалуйста, заметьте следующие: