# 00038. Рисование на экране (Часть 1 - Текст)

Рисование на экране (Часть 1 - Текст)|Начинаем наш очередной урок, и здесь вы научитесь основным командам по рисованию на экране.|wmysterio|wmysterio||||Что значит рисование? - Спросите вы. Это может быть любой текст или текстура, которые могут размещаться в любой точке экрана.

Экран как бы имеет свою координатную сетку, размер которой составляет "640.0" точек по ширине и "448.0" точек по высоте. Начальные координаты "0.0 0.0" и они находятся в правом верхнем углу. Вообще если в поисковике SB ввести слово **DRAW**, то вам выведется список всех команд, которые позволяют рисовать на экране. Рисование можно разбить на две большие группы:

* рисование текста
* рисование текстур

В этом уроке мы коснёмся только текста. Первым делом, рассмотрим опкод, который включает режим рисования:

```
03F0: enable_text_draw 1
```

Здесь:\
1 - включить режим рисования. Если поставить 0 - выключить режим рисования. При смене интерьера, этот параметр сбивается на ноль, по этому его нужно снова включать.

Рассмотрим команды для рисования текста. Самый первый опкод, это:

```
033E: set_draw_text_position 320.0 180.333 GXT 'BJ_PUSH'
```

Здесь:\
320.0 180.333 - координаты на экране. 1-й параметр - координата X ( по ширине ), 2-й - координата Y ( по высоте )\
'BJ\_PUSH' - имя GXT-записи, то есть текст, который содержится в этой записи, будет выведен на экран по координатам

С текстом можно делать разные манипуляции: изменять его цвет и размер:

```
0340: set_text_draw_RGBA 0 90 180 255
033F: set_text_draw_letter_size 1.3 3.36
```

Здесь:\
0 - количество красного цвета ( канал R, от 0 до 255 )\
90 - количество зелёного цвета ( канал G, от 0 до 255 )\
180 - количество синего цвета ( канал B, от 0 до 255 )\
255 - указывает прозрачность текста, если поставить 0, то текст не будет видно. Максимум - 255\
1.3 - размер буквы по ширине\
3.36 - размер буквы по высоте

Так же можно задать шрифт и обводку тексту опкодами:

```
0349: set_text_draw_font 0
081C: draw_text_outline 2 RGBA 10 20 30 255
```

Здесь:\
0 - номер шрифта ( см. [Стили текста - шрифт](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/stili_teksta/1-1-0-43/README.md) )\
2 - плотность обводки ( см. [Стили текста - Обводка](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/stili_teksta/1-1-0-43/README.md) )\
10 - количество красного цвета ( канал R, от 0 до 255 )\
20 - количество зелёного цвета ( канал G, от 0 до 255 )\
30 - количество синего цвета ( канал B, от 0 до 255 )\
255 - указывает прозрачность текста, если поставить 0, то текст не будет видно. Максимум - 255<br>

Кроме этого, можно указать тень текста и её цвет, установить максимальную ширину текста:

```
060D: draw_text_shadow 0 color_RGBA 0 0 0 255
0343: set_text_draw_linewidth 640.0
```

Здесь:\
0 - расстояние тени от текста\
0 0 0 255 - указываются цвета тени и её прозрачность ( См. [Стили текста - Тени](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/stili_teksta/1-1-0-43/README.md) )\
640.0 - указать новую длину строки. Пример-сравнение текста по-умолчанию и текста, которому задали длину 300 символов вы также можете найти в нашей [базе данных, внизу](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/stili_teksta/1-1-0-43/README.md), внизу.

Есть возможность выравнивания текста:

```
0342: enable_text_draw_centered 1 // по-центру
03E4: enable_text_draw_align_right 1 // справа
0341: set_text_draw_align_justify 1 // расстягивает строку на максимальную длину ( пробелы кажутся более длинными )
```

И, напоследок, можно вывести какие то числовые переменные на экран:

```
045A: draw_text_1number 320.0 155.333 GXT 'ALLRACE' number 0@ // ~1~
045B: draw_text_2numbers 320.0 155.333 GXT 'TIME' numbers 0@ 0@ // ~1~ ~1~
07FC: text_draw_box_position_XY 320.0 155.333 GXT_reference 'BOAT_7' value 241@ flag 2 // value 2.43
```

Первый опкод выводит 1 переменную на экран. Второй опкод выводит 2 переменных на экран. Третий опкод выводит дробное число на экран.

Здесь:\
320.0 155.333 - место расположения текста на экране\
'ALLRACE', 'TIME', 'BOAT\_7' - GXT-записи с текстом\
0@ - переменная, в ней должно быть целое число ( можно указать и число, не обязательно переменную )\
241@ - переменная, в ней должно быть дробное число\
2 - выводит количество символов после запятой в дробном числе× \*\*ОЧЕНЬ ВАЖНО:\*\* Что бы текст смог менять размеры и прочее, то манипуляции над ним должны быть перед тем, как выводить сам текст. И такие действия должны быть перед каждой записью с текстом.

Вот пример рисования:

```
:TEXT
thread 'TEXT'
wait 0
03F0: enable_text_draw 1

0226: $TEMP_HEALTH = actor $PLAYER_ACTOR health
0343: set_text_draw_linewidth 300.0
03E4: enable_text_draw_align_right 1
060D: draw_text_shadow 1 color_RGBA 0 0 0 255
0340: set_text_draw_RGBA 255 0 0 255
045A: draw_text_1number 30.0 10.0 GXT 'MAG_4OB' number $TEMP_HEALTH //~1~

04DD: $TEMP_ARMOUR = actor $PLAYER_ACTOR armour
0343: set_text_draw_linewidth 300.0
03E4: enable_text_draw_align_right 1
060D: draw_text_shadow 1 color_RGBA 0 0 0 255
0340: set_text_draw_RGBA 0 255 0 255
045A: draw_text_1number 60.0 10.10 GXT 'MAG_4OB' number $TEMP_ARMOUR //~1~

06AC: $TEMP_SPEED = actor $PLAYER_ACTOR movement_speed
0343: set_text_draw_linewidth 300.0
03E4: enable_text_draw_align_right 1
060D: draw_text_shadow 1 color_RGBA 0 0 0 255
0340: set_text_draw_RGBA 0 0 255 255
07FC: text_draw_1float_position_XY 90.0 10.0 GXT_reference 'MAG_4OB' value $TEMP_SPEED decimal_count 2
jump @TEXT
```

Как видите, всегда перед текстом пишутся параметры а потом рисуются. Если этого не сделать,то текст выведется по-умолчанию. Вот так выглядит рисованный нами текст:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/57811439.png)\
\
× \*\*ВАЖНО:\*\* Что бы текст или текстура отображались на экране всегда, то их необходимо рисовать в циклах!|3113|1|0|57811439\`png\`640\`400\`400\`250\`\`\\||risovanie\_na\_ehkrane\_chast\_1\_tekst|1498868750


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00200/00038.-risovanie-na-ekrane-chast-1-tekst.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
