Уроки - Текстуры и дравы

С помощью вывода на экран дравов или текстур можно создавать внутри-игровой интерфейс, делать подсказки, упрощать геймплей и много полезных вещей. Разберем каждое по порядку.

### **Текстуры**

Текстуры - это преобразованные в .TGA изображения, которые компилирует движок игры и преобразует в текстуры формата .TEX. Текстуры можно выводить на экране на определенных виртуальных координатах по fromX и fromY > toX и toY (0 - 8192). Созданная текстура берет свое начало в первых заданных координатах fromX и fromY, после чего растягивается до второй пары координат toX и toY. Важно учесть, что отображение текстур на экране может разниться на разных мониторах. К примеру, если текстуры были подогнаны на экране 1600x900, то у игроков с 1366x768 могут быть некоторые сдвиги в стороны.

Пример создания текстуры и ее отображение игроку при заходе на сервер:

```
-- фукнция создания текстуры - CreateTexture(fromX,fromY, toX, toY, fileName)
new\_texture = CreateTexture(100, 100, 300, 300, 'menu\_ingame') -- в переменную 'new\_texture' объявляем создание текстуры по 4 координатам, а после указываем само изображение (можно без указания расширения .tga)

function OnPlayerConnect(playerid)
    if IsNPC(playerid) == 0 then -- делаем проверку, подключился игрок или бот. и если это НЕ бот, то
       ShowTexture(playerid, new\_texture); -- отображаем текстуру из переменной 'new\_texture'
    end
end

```

### **Дравы**

Дравы - это определенная строка текста, выведенная на экран. Дравы используются при создании внутри-игровых меню и т.п. Яркий пример использования дравов: время (игровое/реальное). Их расположение частично аналогично текстурам, так как при их выводе так же нужно задавать координаты начала по X и Y, но дравы не тянутся, поэтому второй пары иксов не будет.

```
-- функция создания драва CreateDraw(x, y, text, font, r, g, b)
new\_draw = CreateDraw(100, 100, "New Draw", "Font\_Old\_10\_White\_Hi.tga", 255, 255, 255);

function OnPlayerConnect(playerid)

    if IsNPC(playerid) == 0 then
       ShowDraw(playerid, new\_draw); -- отображаем созданный драв.
    end

end

```
Однако что дравы, что текстуры - все ограничено определенными лимитами, за которые не получится перелезть. Разработчики платформы сделали возможно создавать динамичные для каждого конкретного игрока дравы (с текстурами пока такой возможности нет). К примеру, если на обычные дравы существует определенное ограничение, то на дравы, созданные для конкретного игрока - их нет. Такие дравы создаются немного другим путем. Их не получится объявить вне какой-либо функции.

```
-- функция создания уникальных дравов CreatePlayerDraw(playerid, x, y, text, font, r, g, b);
function OnPlayerConnect(playerid)
    new\_draw = CreatePlayerDraw(playerid, 100, 200, "Draw", "Font\_Old\_10\_White\_Hi.TGA", 255, 255, 255);
    ShowPlayerDraw(playerid, new\_draw);
end

```

### **Обновление или замена текстур/дравов**

При необходимости, уже созданную и выведенную на экран текстуру можно обновить посредством функции **UpdateTexture()**:

```
-- функция для обновления текстуры UpdateTexture(textureid, fromX,fromY, toX, toY, fileName)

new\_texture = CreateTexture(0, 0, 0, 0, 'menu\_ingame');
function OnPlayerConnect(playerid)
    if IsNPC(playerid) == 0 then
        ShowTexture(playerid, new\_texture);
        UpdateTexture(new\_texture, 100, 100, 300, 300, 'dlg\_conversation') -- обновляем текстуру, меняя ее координаты и название изображения
    end
end

```

Обновление драва происходит через функцию **UpdateDraw** (либо же **UpdatePlayerDraw**):

```
-- функция обновления драва (обычного) UpdateDraw(drawid, x, y, text, font, r, g, b)
-- функция обновления драва уникального UpdatePlayerDraw(playerid, drawid, x, y, text, font, r, g, b)
my\_draw = CreateDraw(0, 0, "Draw", "Font\_Old\_10\_White\_Hi.TGA",255, 255, 255);

function OnPlayerConnect(playerid)

    my\_draw\_2 = CreatePlayerDraw(playerid, 0, 0, "Draw 2", "Font\_Old\_10\_White\_Hi.tga", 255, 255, 255);
    ShowDraw(playerid, my\_draw);
    ShowPlayerDraw(playerid, my\_draw\_2);
    UpdateDraw(my\_draw, 100, 100, "Drawww", "Font\_Old\_20\_White\_Hi.TGA", 255, 255, 255)
    UpdatePlayerDraw(playerid, my\_draw\_2, 100, 100, "Drawww\_2", "Font\_Old\_20\_White\_Hi.TGA", 255, 255, 255)

end

```