Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 13
  1. #1
    Аватар для XemyL
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.11.2013
    Сообщений
    22
    Репутация:
    25 ±

    Облегчаем работу с TextDraw

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

    Итак, мы имеет огромный код трёх TextDraw в виде обычного текста:
    PHP код:
    TextDraw[0] = CreatePlayerTextDraw(playerid210.000000176.000000"Текст 1");
    PlayerTextDrawColor(playeridTextDraw[0], -6736897);
    PlayerTextDrawSetOutline(playeridTextDraw[0], 1);
    PlayerTextDrawSetProportional(playeridTextDraw[0], 1);
    PlayerTextDrawSetShadow(playeridTextDraw[0], 1);
    PlayerTextDrawAlignment(playeridTextDraw[0], 1);
    PlayerTextDrawLetterSize(playeridTextDraw[0], 0.52.1);
    PlayerTextDrawFont(playeridTextDraw[0], 1);

    TextDraw[1] = CreatePlayerTextDraw(playerid220.000000186.000000"Текст 2");
    PlayerTextDrawColor(playeridTextDraw[1], -6736897);
    PlayerTextDrawSetOutline(playeridTextDraw[1], 1);
    PlayerTextDrawSetProportional(playeridTextDraw[1], 1);
    PlayerTextDrawSetShadow(playeridTextDraw[1], 1);
    PlayerTextDrawAlignment(playeridTextDraw[1], 1);
    PlayerTextDrawLetterSize(playeridTextDraw[1], 0.52.1);
    PlayerTextDrawFont(playeridTextDraw[1], 1);

    TextDraw[2] = CreatePlayerTextDraw(playerid230.000000196.000000"Текст 3");
    PlayerTextDrawColor(playeridTextDraw[2], -6736897);
    PlayerTextDrawSetOutline(playeridTextDraw[2], 1);
    PlayerTextDrawSetProportional(playeridTextDraw[2], 1);
    PlayerTextDrawSetShadow(playeridTextDraw[2], 1);
    PlayerTextDrawAlignment(playeridTextDraw[2], 1);
    PlayerTextDrawLetterSize(playeridTextDraw[2], 0.52.1);
    PlayerTextDrawFont(playeridTextDraw[2], 1); 
    Что мы тут видим? Кучу повторяющихся строк, где меняется только цифра (ячейка массива).
    Всё это можно внести в цикл и получится маленький и аккуратный код:

    PHP код:
    TextDraw[0] = CreatePlayerTextDraw(playerid210.000000176.000000"Текст 1");
    TextDraw[1] = CreatePlayerTextDraw(playerid220.000000186.000000"Текст 2");
    TextDraw[2] = CreatePlayerTextDraw(playerid230.000000196.000000"Текст 3");
        
    for(new 
    A!= 3A++)
    {
        
    PlayerTextDrawColor(playeridTextDraw[A], -6736897);
        
    PlayerTextDrawSetOutline(playeridTextDraw[A], 1);
        
    PlayerTextDrawSetProportional(playeridTextDraw[A], 1);
        
    PlayerTextDrawSetShadow(playeridTextDraw[A], 1);
        
    PlayerTextDrawAlignment(playeridTextDraw[A], 1);
        
    PlayerTextDrawLetterSize(playeridTextDraw[A], 0.52.1);
        
    PlayerTextDrawFont(playeridTextDraw[A], 1);

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

  2. #2
    Аватар для Копюшон
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2013
    Сообщений
    93
    Репутация:
    14 ±
    Очень полезный урок, всегда так делал :)

  3. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А я всегда запихивал текстдравы в отдельный инклюд и подключение инклюда вставлял в OnGameModeInit. Так же и с объектами/авто поступал. И всё у меня в жизни хорошо
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. #4
    Аватар для XemyL
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.11.2013
    Сообщений
    22
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А я всегда запихивал текстдравы в отдельный инклюд и подключение инклюда вставлял в OnGameModeInit. Так же и с объектами/авто поступал. И всё у меня в жизни хорошо
    Это размер кода не уменьшает.

  5. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от XemyL Посмотреть сообщение
    Это размер кода не уменьшает.
    А разве от размера кода увеличивается производительность? Или то, что я создаю 10 текстдравов напрямую, а вы через цикл - что-то меняет?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #6
    Аватар для XemyL
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.11.2013
    Сообщений
    22
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А разве от размера кода увеличивается производительность? Или то, что я создаю 10 текстдравов напрямую, а вы через цикл - что-то меняет?
    Размер выходного файла и время компиляции.

  7. #7
    Аватар для Gressie
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.05.2013
    Сообщений
    258
    Репутация:
    6 ±
    У меня вот разные координаты, как их оптимизировать? Покажите пример.
    PHP код:
        Banditraw[0] = TextDrawCreate(138.000000181.000000".");
        
    TextDrawBackgroundColor(Banditraw[0], BACKGROUNG);
        
    TextDrawFont(Banditraw[0], 1);
        
    TextDrawLetterSize(Banditraw[0], 0.50000014.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.00000068.000000);

        
    Banditraw[1] = TextDrawCreate(138.000000160.000000"Slot Machine");
        
    TextDrawBackgroundColor(Banditraw[1], BACKGROUNG);
        
    TextDrawFont(Banditraw[1], 3);
        
    TextDrawLetterSize(Banditraw[1], 0.5499991.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.0000000.000000);

        
    Banditraw[2] = TextDrawCreate(191.000000206.000000".");
        
    TextDrawBackgroundColor(Banditraw[2], FIELD_BACKGROUND);
        
    TextDrawFont(Banditraw[2], 1);
        
    TextDrawLetterSize(Banditraw[2], 0.5000008.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.0000000.000000);


        
    Banditraw[4] = TextDrawCreate(227.000000213.000000"]");
        
    TextDrawBackgroundColor(Banditraw[4], 255);
        
    TextDrawFont(Banditraw[4], 2);
        
    TextDrawLetterSize(Banditraw[4], 1.7600006.399999);
        
    TextDrawColor(Banditraw[4], -1);
        
    TextDrawSetOutline(Banditraw[4], 0);
        
    TextDrawSetProportional(Banditraw[4], 1);
        
    TextDrawSetShadow(Banditraw[4], 1);

        
    Banditraw[5] = TextDrawCreate(307.000000213.000000"]");
        
    TextDrawBackgroundColor(Banditraw[5], 255);
        
    TextDrawFont(Banditraw[5], 2);
        
    TextDrawLetterSize(Banditraw[5], 1.7600006.399999);
        
    TextDrawColor(Banditraw[5], -1);
        
    TextDrawSetOutline(Banditraw[5], 0);
        
    TextDrawSetProportional(Banditraw[5], 1);
        
    TextDrawSetShadow(Banditraw[5], 1);

        
    Banditraw[6] = TextDrawCreate(397.000000213.000000"]");
        
    TextDrawBackgroundColor(Banditraw[6], 255);
        
    TextDrawFont(Banditraw[6], 2);
        
    TextDrawLetterSize(Banditraw[6], 1.7600006.399999);
        
    TextDrawColor(Banditraw[6], -1);
        
    TextDrawSetOutline(Banditraw[6], 0);
        
    TextDrawSetProportional(Banditraw[6], 1);
        
    TextDrawSetShadow(Banditraw[6], 1);

        
    Banditraw[3] = TextDrawCreate(476.000000314.000000".");
        
    TextDrawBackgroundColor(Banditraw[3], BACKGROUNG);
        
    TextDrawFont(Banditraw[3], 3);
        
    TextDrawLetterSize(Banditraw[3], 0.6800002.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.000000317.000000"EXIT");
        
    TextDrawBackgroundColor(Banditraw[7], 255);
        
    TextDrawFont(Banditraw[7], 3);
        
    TextDrawLetterSize(Banditraw[7], 0.5099991.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.000000357.000000".");
        
    TextDrawBackgroundColor(Banditraw[8], BLACK_PLUS);
        
    TextDrawFont(Banditraw[8], 1);
        
    TextDrawLetterSize(Banditraw[8], 0.5000003.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.00000030.000000);

        
    Banditraw[9] = TextDrawCreate(292.000000357.000000"ROLL");
        
    TextDrawBackgroundColor(Banditraw[9], 255);
        
    TextDrawFont(Banditraw[9], 3);
        
    TextDrawLetterSize(Banditraw[9], 1.1000003.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.000000339.000000"]");
        
    TextDrawBackgroundColor(Banditraw[10], 255);
        
    TextDrawFont(Banditraw[10], 2);
        
    TextDrawLetterSize(Banditraw[10], 1.0100003.399999);
        
    TextDrawColor(Banditraw[10], -16776961);
        
    TextDrawSetOutline(Banditraw[10], 0);
        
    TextDrawSetProportional(Banditraw[10], 1);
        
    TextDrawSetShadow(Banditraw[10], 1);

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

  8. #8
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Сокращение кода методом повторения кода в цикле, применяется только при одинаковых параметрах Textdraw's. Т.е если у тебя куча одинаковых надписей но с разным расположением по экрану, то выше рекомендованный способ, полезен.

  9. #9
    Аватар для Nurick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±
    Там же всё на примере объяснили, если только отличаеться координаты расположения текста то можно делать через цикл

    PHP код:
        Banditraw[0] = TextDrawCreate(396.000000339.000000"]");
        
    Banditraw[1] = TextDrawCreate(220.000000339.000000"]");
        
        for(new 
    A!= 2A++) 
        {    
            
    TextDrawBackgroundColor(Banditraw[A], 255);
            
    TextDrawFont(Banditraw[A], 2);
            
    TextDrawLetterSize(Banditraw[A], 1.0100003.399999);
            
    TextDrawColor(Banditraw[A], -16776961);
            
    TextDrawSetOutline(Banditraw[A], 0);
            
    TextDrawSetProportional(Banditraw[A], 1);
            
    TextDrawSetShadow(Banditraw[A], 1);
        } 

  10. #10
    Аватар для Spectrum
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.04.2014
    Адрес
    Omsk, Russia
    Сообщений
    349
    Репутация:
    49 ±
    Если тебе не нужны кликабельные текстдравы или текстдравы, которые будут использовать SetString, то можно создавать тупо один текстдрав, используя \n,\t и т.п.
    Skype: sp3ctrum_attack

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •