Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Как создавать прогресс бары на TextDraw

Статус
В этой теме нельзя размещать новые ответы.

AndreY.eXe

Эксперт
Пользователь
Регистрация
16 Сен 2017
Сообщения
1,327
Лучшие ответы
0
Репутация
241
Привет!

Многие у меня спрашивали, как правильно создавать прогресс бары через Textdraw, и дабы не разъснять всем, я решил запилить урок по этому. В этом уроке я приведу пример использования, как рисовать и писать код для прогресс баров. Отвечу на вопрос, который приходит всем "гуру-скриптерам", после прочтенного:

Q: Зачем использовать TD, если можно использовать простой FS, который и создает эти прогресс бары?
A: А за тем, что в FS создается единый стиль этого бара - стиль, как у полоски ХП, брони и воздуха. А в TD можно создать любой стиль, который на ум придет.

Ну чтож, думаю все объяснил, теперь пора приступать.

Для начала, вот примеры прогресс баров на TD:
  1. Мини-игра "Мышь" (Отсчет времени)
  2. Система голода (Very Good) (Мини-игра)
  3. Уникальная система загрузки
  4. Инфо. об игроке при прицеливании (Показатель ХП и брони)
Думаю, этого будет достаточно. А теперь, к тому, как создавать такие прогресс бары:


Для начала, нам понадобиться редактор TD, я советую русский редактор от Ramzes'a: .
Запускаем редактор и заходим на сервер.

Мы будем создавать простой прогресс бар, в котором будет фон, и сам прогресс:
  1. Прописываем команду /tde и создаем новый проект: назовем его NewProgressBar.
  2. Правой кнопкой мыши нажимаем на кнопку "New" и выбираем "Спрайт".
  3. У нас создается спрайт, подгоняем его под размер. Чтобы придать ему цвет, правой кнопкой мыши нажимаем на кнопку "Color" и выбираем походящий вариант.
  4. Копируем данный спрайт кнопкой "Dublicate", придаем ему другой цвет и подгоняем под меньший размер, так, чтобы у нас фон не много выпирал из прогресса. (советую подбирать размер мышкой, т.к так придается точный размер в целых числах)
  5. Делаем этот спрайт для игрока и экспортируем его, нажав "Export" и выбрав название переменной.






Вот и все, мы нарисовали прогресс бар, теперь нам нужно написать под него код.

Забираем наш TD из scriptfiles > tde > exports > NewProgressBar.
И вставляем код в мод:
PHP:
// В начало мода
new Text:bar_TD[1];
new PlayerText:bar_PTD[MAX_PLAYERS][1];

// В OnGameModeInit
bar_TD[0] = TextDrawCreate(236.5000, 206.0222, "LD_SPAC:white"); // пусто
TextDrawTextSize(bar_TD[0], 178.0000, 63.0000);
TextDrawAlignment(bar_TD[0], 1);
TextDrawColor(bar_TD[0], 858993663);
TextDrawBackgroundColor(bar_TD[0], 255);
TextDrawFont(bar_TD[0], 4);
TextDrawSetProportional(bar_TD[0], 0);
TextDrawSetShadow(bar_TD[0], 0);

// В OnPlayerConnect
bar_PTD[playerid][0] = CreatePlayerTextDraw(playerid, 239.0000, 209.4333, "LD_SPAC:white"); // пусто
PlayerTextDrawTextSize(playerid, bar_PTD[playerid][0], 173.0000, 57.0000);
PlayerTextDrawAlignment(playerid, bar_PTD[playerid][0], 1);
PlayerTextDrawColor(playerid, bar_PTD[playerid][0], 329001215);
PlayerTextDrawBackgroundColor(playerid, bar_PTD[playerid][0], 255);
PlayerTextDrawFont(playerid, bar_PTD[playerid][0], 4);
PlayerTextDrawSetProportional(playerid, bar_PTD[playerid][0], 0);
PlayerTextDrawSetShadow(playerid, bar_PTD[playerid][0], 0);
Теперь нам нужна вот эта функция:
PHP:
PlayerTextDrawTextSize(playerid, bar_PTD[playerid][0], 173.0000, 57.0000);
У нас тут есть 2 числа: 173.0000 и 57.0000.
173.0000 - это длина нашего прогресса, а 57.0000 - высота.
Нам понадобится длина.
Но, перед тем, как делать систему - обнулите длину, при создании TD:
PHP:
PlayerTextDrawTextSize(playerid, bar_PTD[playerid][0], 0.0000, 57.0000);
Как сделать так, чтобы этот прогресс двигался:
Для начала, нужно задать количество, назовем их сдвигами, которые будет ограничением для прогресса: пусть это будет 100.
Теперь нам необходимо поделить 173 на 100 - 1.73. Это нужно для того, чтобы узнать, сколько нужно прибавлять к длине.
Создаем повторяющайся таймер на 50 м.с и переменную, которая будет отвечать за "сдвиги", а так же показываем TD:
PHP:
// В начало мода
new ProgressBarTimer[MAX_PLAYERS];
new Sdvig[MAX_PLAYERS];

// Куда хотите
TextDrawShowForPlayer(playerid, bar_TD[0]);

Sdvig[playerid] = 0;
ProgressBarTimer[playerid] = SetTimerEx("UpdateProgressBar", 50, true, "i", playerid);

// Ну и обнуляем, где захотите
KillTimer(ProgressBarTimer[playerid]);
Далее, создаем это в любом место в моде и делаем систему:
PHP:
forward UpdateProgressBar(playerid);
public UpdateProgressBar(playerid)
{
	Sdvig[playerid] ++; // Прибовляем "сдвиг"
	PlayerTextDrawTextSize(playerid, bar_PTD[playerid][0], Sdvig[playerid]*1.73, 57.0000); // Умножаем "сдвиги" на полученное ранее число, тем самым прибавляем длину TD
	PlayerTextDrawShow(playerid, bar_PTD[playerid][0]); // Показываем TD, дабы обновить его у игрока

	if(Sdvig[playerid] >= 100) // Ставим проверку на ограничение в 100 "сдвигов"
	{
		KillTimer(ProgressBarTimer[playerid]); // Удаляем таймер

		PlayerTextDrawTextSize(playerid, bar_PTD[playerid][0], 0.0, 57.0000); // Обнуляем и скрываем TD
		PlayerTextDrawHide(playerid, bar_PTD[playerid][0]);
		TextDrawHideForPlayer(playerid, bar_TD[0]);
	}
	return true;
}
На этом все! За ранее прошу прощения, если кому-то что-то не понятно, ибо урок делаю впервые.
Если что-то не понятно, задавайте вопросы в тему - отвечу.

Чтобы Ваш прогресс шел более плавно, необходимо подбирать кол-во "сдвигов" и скорость повтора таймера.







Способ вычесления длины прогресс бара от Вадим97:
PHP:
#define PROGRESS_BAR(%0,%1) (%0 * ((%1 != 0) ? (%1 / 100) : (0)))

// Тем самым, в PlayerTextDrawTextSize в UpdateProgressBar заменяем:
Sdvig[playerid]*1.73 >> PROGRESS_BAR(Sdvig[playerid], 173)

PlayerTextDrawTextSize(playerid, bar_PTD[playerid][0], PROGRESS_BAR(Sdvig[playerid], 173), 57.0000);
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу