Графика
Графический интерпретатор INSTEAD анализирует атрибут сцены 'pic', и воспринимает его как путь к картинке, например:
room {
pic = 'gfx/home.png';
nam = 'Дома';
dsc = 'Я у себя дома';
};Важно!
Используйте в путях только прямые '/'. Также, настоятельно рекомендуется использовать в именах каталогов и файлов только латинские строчные символы. Этим самым вы обезопасите свою игру от проблем с совместимостью и она будет работать на всех архитектурных платформах, куда портирован INSTEAD.
Конечно, 'pic' может быть функцией, расширяя возможности разработчика. Если в текущей сцене не определён атрибут 'pic', то берётся атрибут 'game.pic'. Если не определён и он, то картинка не отображается.
Поддерживаются все наиболее распространённые форматы изображений, но я рекомендую вам использовать 'png' и (когда важен размер) 'jpg'.
Вы можете использовать в качестве картинок анимированные gif файлы.
Вы можете встраивать графические изображения прямо в текст, в том числе в инвентарь, переходы, заглавия комнат и 'dsc' с помощью функции 'fmt.img' (Для этого включите модуль fmt).
Например:
require "fmt"
obj {
nam = 'яблоко'
disp = 'Яблоко'..fmt.img('img/apple.png');
}Тем-не менее, картинку сцены всегда следует оформлять в виде 'pic' атрибута, а не вставки 'fmt.img' в 'dsc' комнаты.
Дело в том, что картинка сцены масштабируется по другому алгоритму. Картинки 'fmt.img' масштабируются в соответствии с настройками INSTEAD (масштаб темы), а 'pic' -- учитывает также размер картинки.
Кроме того, картинки 'pic' обладают и другими свойствами, например, возможностью отслеживания координат кликов мышью.
Если вы поместите 'fmt.img' внутрь { и }, то получите графическую ссылку.
obj {
nam = 'яблоко';
disp = 'яблоко ' ..img('img/apple.png');
dsc = function(s)
p ("На полу лежит {яблоко",fmt.img 'img/apple.png', "}");
-- другие варианты:
-- return "На полу лежит {яблоко"..fmt.img('img/apple.png').."}";
-- p "На полу лежит {яблоко"..fmt.img('img/apple.png').."}";
-- или dsc = "На полу лежит {яблоко"..fmt.img('img/apple.png').."}";
end;
}INSTEAD поддерживает обтекание картинок текстом. Если картинка вставляется с помощью функции 'fmt.imgl'/'fmt.imgr', она будет расположена у левого/правого края.
Важно!
Картинки, вставленные в текст с помощью 'fmt.imgl/fmt.imgr' не могут быть ссылками!!! Используйте их только в декоративных целях.
Для задания отступов вокруг изображения используйте 'pad', например:
fmt.imgl 'pad:16,picture.png' -- отступы по 16 от каждого края
fmt.imgl 'pad:0 16 16 4,picture.png' -- отступы: вверху 0, справа 16, внизу 16, слева 4
fmt.imgl 'pad:0 16,picture.png' -- отступы: вверху 0, справа 16, внизу 0, слева 16Вы можете использовать псевдо-файлы для изображений прямоугольников и пустых областей:
dsc = fmt.img 'blank:32x32'..[[Строка с пустым изображением.]];
dsc = fmt.img 'box:32x32,red,128'..[[Строка красным полупрозрачным квадратом.]];INSTEAD может обрабатывать составные картинки, например:
pic = 'gfx/mycat.png;gfx/milk.png@120,25;gfx/fish.png@32,32';Таким образом, составная картинка представляет собой набор путей к изображениям, разделённых символом ';'. Вторая и последующие компоненты могут содержать постфикс в виде @x_координата,y_координата%, где координате 0,0 соответствует левый верхний угол всего изображения. Общий размер картинки считается равным общему размеру первой компоненте составной картинки, то есть, первый компонент (в нашем примере -- gfx/mycat.png) играет роль холста, а последующие компоненты накладываются на этот холст.
Наложение происходит для левого верхнего угла накладываемой картинки. Если вам нужно, чтобы наложение происходило относительно центра накладываемой картинки, используйте перед координатами префикс ''c'', например:
pic = 'gfx/galaxy.png;gfx/star.png@c128,132';Оформив в виде функции формирование пути составной картинки, вы можете генерировать изображение на основе игрового состояния.
Если вы в своей игре привязываетесь к каким-то координатам изображений, или к их размерам, делайте это относительно оригинальных размеров изображений. При масштабировании темы под заданное игроком разрешение, INSTEAD сам будет осуществлять пересчёт координат (при этом координаты для игры выглядят так, как будто игра запущена без масштабирования). Однако, возможны небольшие погрешности вычислений.
Если вам не хватает функций, описанных в этой главе, изучите модуль "sprite", который предоставляет более широкие возможности по графическому оформлению. Но я крайне не рекомендую делать это в своей первой игре.