PDA

Просмотр полной версии : [Урок] Облегчаем работу с TextDraw



XemyL
11.04.2014, 18:26
При работе с TextDraw неопытные скриптеры и различные TextDraw редакторы составляют огромный код, который создаёт некоторые неудобства. В этом уроке я покажу вам один из способов значительного сокращения кода при работе с TextDraw.

Итак, мы имеет огромный код трёх TextDraw в виде обычного текста:

TextDraw[0] = CreatePlayerTextDraw(playerid, 210.000000, 176.000000, "Текст 1");
PlayerTextDrawColor(playerid, TextDraw[0], -6736897);
PlayerTextDrawSetOutline(playerid, TextDraw[0], 1);
PlayerTextDrawSetProportional(playerid, TextDraw[0], 1);
PlayerTextDrawSetShadow(playerid, TextDraw[0], 1);
PlayerTextDrawAlignment(playerid, TextDraw[0], 1);
PlayerTextDrawLetterSize(playerid, TextDraw[0], 0.5, 2.1);
PlayerTextDrawFont(playerid, TextDraw[0], 1);

TextDraw[1] = CreatePlayerTextDraw(playerid, 220.000000, 186.000000, "Текст 2");
PlayerTextDrawColor(playerid, TextDraw[1], -6736897);
PlayerTextDrawSetOutline(playerid, TextDraw[1], 1);
PlayerTextDrawSetProportional(playerid, TextDraw[1], 1);
PlayerTextDrawSetShadow(playerid, TextDraw[1], 1);
PlayerTextDrawAlignment(playerid, TextDraw[1], 1);
PlayerTextDrawLetterSize(playerid, TextDraw[1], 0.5, 2.1);
PlayerTextDrawFont(playerid, TextDraw[1], 1);

TextDraw[2] = CreatePlayerTextDraw(playerid, 230.000000, 196.000000, "Текст 3");
PlayerTextDrawColor(playerid, TextDraw[2], -6736897);
PlayerTextDrawSetOutline(playerid, TextDraw[2], 1);
PlayerTextDrawSetProportional(playerid, TextDraw[2], 1);
PlayerTextDrawSetShadow(playerid, TextDraw[2], 1);
PlayerTextDrawAlignment(playerid, TextDraw[2], 1);
PlayerTextDrawLetterSize(playerid, TextDraw[2], 0.5, 2.1);
PlayerTextDrawFont(playerid, TextDraw[2], 1);

Что мы тут видим? Кучу повторяющихся строк, где меняется только цифра (ячейка массива).
Всё это можно внести в цикл и получится маленький и аккуратный код:


TextDraw[0] = CreatePlayerTextDraw(playerid, 210.000000, 176.000000, "Текст 1");
TextDraw[1] = CreatePlayerTextDraw(playerid, 220.000000, 186.000000, "Текст 2");
TextDraw[2] = CreatePlayerTextDraw(playerid, 230.000000, 196.000000, "Текст 3");

for(new A; A != 3; A++)
{
PlayerTextDrawColor(playerid, TextDraw[A], -6736897);
PlayerTextDrawSetOutline(playerid, TextDraw[A], 1);
PlayerTextDrawSetProportional(playerid, TextDraw[A], 1);
PlayerTextDrawSetShadow(playerid, TextDraw[A], 1);
PlayerTextDrawAlignment(playerid, TextDraw[A], 1);
PlayerTextDrawLetterSize(playerid, TextDraw[A], 0.5, 2.1);
PlayerTextDrawFont(playerid, TextDraw[A], 1);
}

Вот и всё. Удачи в программировании!

Копюшон
11.04.2014, 19:13
Очень полезный урок, всегда так делал :)

DeimoS
11.04.2014, 19:30
А я всегда запихивал текстдравы в отдельный инклюд и подключение инклюда вставлял в OnGameModeInit. Так же и с объектами/авто поступал. И всё у меня в жизни хорошо

XemyL
11.04.2014, 19:44
А я всегда запихивал текстдравы в отдельный инклюд и подключение инклюда вставлял в OnGameModeInit. Так же и с объектами/авто поступал. И всё у меня в жизни хорошо

Это размер кода не уменьшает.

DeimoS
11.04.2014, 19:47
Это размер кода не уменьшает.

А разве от размера кода увеличивается производительность? Или то, что я создаю 10 текстдравов напрямую, а вы через цикл - что-то меняет?

XemyL
11.04.2014, 19:49
А разве от размера кода увеличивается производительность? Или то, что я создаю 10 текстдравов напрямую, а вы через цикл - что-то меняет?

Размер выходного файла и время компиляции.

Gressie
10.05.2014, 03:21
У меня вот разные координаты, как их оптимизировать? Покажите пример.

Banditraw[0] = TextDrawCreate(138.000000, 181.000000, ".");
TextDrawBackgroundColor(Banditraw[0], BACKGROUNG);
TextDrawFont(Banditraw[0], 1);
TextDrawLetterSize(Banditraw[0], 0.500000, 14.000000);
TextDrawColor(Banditraw[0], 255);
TextDrawSetOutline(Banditraw[0], 0);
TextDrawSetProportional(Banditraw[0], 1);
TextDrawUseBox(Banditraw[0], 1);
TextDrawBoxColor(Banditraw[0], BACKGROUNG);
TextDrawTextSize(Banditraw[0], 528.000000, 68.000000);

Banditraw[1] = TextDrawCreate(138.000000, 160.000000, "Slot Machine");
TextDrawBackgroundColor(Banditraw[1], BACKGROUNG);
TextDrawFont(Banditraw[1], 3);
TextDrawLetterSize(Banditraw[1], 0.549999, 1.700000);
TextDrawColor(Banditraw[1], -1);
TextDrawSetOutline(Banditraw[1], 0);
TextDrawSetProportional(Banditraw[1], 1);
TextDrawSetShadow(Banditraw[1], 1);
TextDrawUseBox(Banditraw[1], 1);
TextDrawBoxColor(Banditraw[1], BACKGROUNG);
TextDrawTextSize(Banditraw[1], 262.000000, 0.000000);

Banditraw[2] = TextDrawCreate(191.000000, 206.000000, ".");
TextDrawBackgroundColor(Banditraw[2], FIELD_BACKGROUND);
TextDrawFont(Banditraw[2], 1);
TextDrawLetterSize(Banditraw[2], 0.500000, 8.000000);
TextDrawColor(Banditraw[2], FIELD_BACKGROUND);
TextDrawSetOutline(Banditraw[2], 0);
TextDrawSetProportional(Banditraw[2], 1);
TextDrawUseBox(Banditraw[2], 1);
TextDrawBoxColor(Banditraw[2], FIELD_BACKGROUND);
TextDrawTextSize(Banditraw[2], 474.000000, 0.000000);


Banditraw[4] = TextDrawCreate(227.000000, 213.000000, "]");
TextDrawBackgroundColor(Banditraw[4], 255);
TextDrawFont(Banditraw[4], 2);
TextDrawLetterSize(Banditraw[4], 1.760000, 6.399999);
TextDrawColor(Banditraw[4], -1);
TextDrawSetOutline(Banditraw[4], 0);
TextDrawSetProportional(Banditraw[4], 1);
TextDrawSetShadow(Banditraw[4], 1);

Banditraw[5] = TextDrawCreate(307.000000, 213.000000, "]");
TextDrawBackgroundColor(Banditraw[5], 255);
TextDrawFont(Banditraw[5], 2);
TextDrawLetterSize(Banditraw[5], 1.760000, 6.399999);
TextDrawColor(Banditraw[5], -1);
TextDrawSetOutline(Banditraw[5], 0);
TextDrawSetProportional(Banditraw[5], 1);
TextDrawSetShadow(Banditraw[5], 1);

Banditraw[6] = TextDrawCreate(397.000000, 213.000000, "]");
TextDrawBackgroundColor(Banditraw[6], 255);
TextDrawFont(Banditraw[6], 2);
TextDrawLetterSize(Banditraw[6], 1.760000, 6.399999);
TextDrawColor(Banditraw[6], -1);
TextDrawSetOutline(Banditraw[6], 0);
TextDrawSetProportional(Banditraw[6], 1);
TextDrawSetShadow(Banditraw[6], 1);

Banditraw[3] = TextDrawCreate(476.000000, 314.000000, ".");
TextDrawBackgroundColor(Banditraw[3], BACKGROUNG);
TextDrawFont(Banditraw[3], 3);
TextDrawLetterSize(Banditraw[3], 0.680000, 2.300001);
TextDrawColor(Banditraw[3], 0x00000000);
TextDrawSetOutline(Banditraw[3], 0);
TextDrawSetProportional(Banditraw[3], 1);
TextDrawUseBox(Banditraw[3], 1);
TextDrawBoxColor(Banditraw[3], BACKGROUNG);
TextDrawTextSize(Banditraw[3], 528.000000, -40.000000);

Banditraw[7] = TextDrawCreate(486.000000, 317.000000, "EXIT");
TextDrawBackgroundColor(Banditraw[7], 255);
TextDrawFont(Banditraw[7], 3);
TextDrawLetterSize(Banditraw[7], 0.509999, 1.300000);
TextDrawColor(Banditraw[7], -1);
TextDrawSetOutline(Banditraw[7], 0);
TextDrawSetProportional(Banditraw[7], 1);
TextDrawSetShadow(Banditraw[7], 1);
TextDrawSetSelectable(Banditraw[7], 1);

Banditraw[8] = TextDrawCreate(241.000000, 357.000000, ".");
TextDrawBackgroundColor(Banditraw[8], BLACK_PLUS);
TextDrawFont(Banditraw[8], 1);
TextDrawLetterSize(Banditraw[8], 0.500000, 3.299999);
TextDrawColor(Banditraw[8], 0x00000000);
TextDrawSetOutline(Banditraw[8], 0);
TextDrawSetProportional(Banditraw[8], 1);
TextDrawUseBox(Banditraw[8], 1);
TextDrawBoxColor(Banditraw[8], BLACK_PLUS);
TextDrawTextSize(Banditraw[8], 410.000000, 30.000000);

Banditraw[9] = TextDrawCreate(292.000000, 357.000000, "ROLL");
TextDrawBackgroundColor(Banditraw[9], 255);
TextDrawFont(Banditraw[9], 3);
TextDrawLetterSize(Banditraw[9], 1.100000, 3.100000);
TextDrawColor(Banditraw[9], -1);
TextDrawSetOutline(Banditraw[9], 0);
TextDrawSetProportional(Banditraw[9], 1);
TextDrawSetShadow(Banditraw[9], 1);
TextDrawSetSelectable(Banditraw[9], 1);

Banditraw[10] = TextDrawCreate(396.000000, 339.000000, "]");
TextDrawBackgroundColor(Banditraw[10], 255);
TextDrawFont(Banditraw[10], 2);
TextDrawLetterSize(Banditraw[10], 1.010000, 3.399999);
TextDrawColor(Banditraw[10], -16776961);
TextDrawSetOutline(Banditraw[10], 0);
TextDrawSetProportional(Banditraw[10], 1);
TextDrawSetShadow(Banditraw[10], 1);

Banditraw[11] = TextDrawCreate(220.000000, 339.000000, "]");
TextDrawBackgroundColor(Banditraw[11], 255);
TextDrawFont(Banditraw[11], 2);
TextDrawLetterSize(Banditraw[11], 1.010000, 3.399999);
TextDrawColor(Banditraw[11], -16776961);
TextDrawSetOutline(Banditraw[11], 0);
TextDrawSetProportional(Banditraw[11], 1);
TextDrawSetShadow(Banditraw[11], 1);

wAx
13.05.2014, 10:37
Сокращение кода методом повторения кода в цикле, применяется только при одинаковых параметрах Textdraw's. Т.е если у тебя куча одинаковых надписей но с разным расположением по экрану, то выше рекомендованный способ, полезен.

Nurick
13.05.2014, 11:47
Там же всё на примере объяснили, если только отличаеться координаты расположения текста то можно делать через цикл


Banditraw[0] = TextDrawCreate(396.000000, 339.000000, "]");
Banditraw[1] = TextDrawCreate(220.000000, 339.000000, "]");

for(new A; A != 2; A++)
{
TextDrawBackgroundColor(Banditraw[A], 255);
TextDrawFont(Banditraw[A], 2);
TextDrawLetterSize(Banditraw[A], 1.010000, 3.399999);
TextDrawColor(Banditraw[A], -16776961);
TextDrawSetOutline(Banditraw[A], 0);
TextDrawSetProportional(Banditraw[A], 1);
TextDrawSetShadow(Banditraw[A], 1);
}

Spectrum
13.05.2014, 17:13
Если тебе не нужны кликабельные текстдравы или текстдравы, которые будут использовать SetString, то можно создавать тупо один текстдрав, используя \n,\t и т.п.

DeimoS
13.05.2014, 18:25
Если тебе не нужны кликабельные текстдравы или текстдравы, которые будут использовать SetString, то можно создавать тупо один текстдрав, используя \n,\t и т.п.

На разных мониторах такие текстдравы будут выглядеть по разному. И не факт, что ваш текстдрав, убранный в центр экрана с помощью "\t", не окажется за экраном

Elaid
28.11.2014, 09:51
А смысл? Ты создал цикл с одинаковыми TD. Зачем мне 3 одинаковых TD :sarcastic:

Disinterpreter
29.11.2014, 19:30
Никакого псевдо ООП не реалзиовать тут?