Активный
- Тема Автор
- #1
TextDraw позволяет создавать графические элементы интерфейса. Разберем работу с ними.
Создание TextDraw
Свойства TextDraw
Показ и скрытие
Пример: HUD интерфейс
Кликабельные TextDraw
Персональные TextDraw
Важные моменты:
- Уничтожайте TextDraw при выходе игрока
- Обновляйте TextDraw регулярно для динамических данных
- Используйте персональные TextDraw для индивидуальных данных
- Оптимизируйте количество TextDraw для производительности
TextDraw создает красивый и функциональный интерфейс!
Создание TextDraw
Код:
new Text:healthText;
new Text:armourText;
public OnGameModeInit()
{
// Создание TextDraw для здоровья
healthText = TextDrawCreate(100.0, 100.0, "Health: 100");
TextDrawFont(healthText, 1);
TextDrawLetterSize(healthText, 0.4, 1.5);
TextDrawColor(healthText, 0xFF0000FF);
TextDrawSetOutline(healthText, 1);
TextDrawSetShadow(healthText, 1);
TextDrawShowForAll(healthText);
// Создание TextDraw для брони
armourText = TextDrawCreate(100.0, 120.0, "Armour: 0");
TextDrawFont(armourText, 1);
TextDrawLetterSize(armourText, 0.4, 1.5);
TextDrawColor(armourText, 0x0000FFFF);
TextDrawSetOutline(armourText, 1);
TextDrawSetShadow(armourText, 1);
TextDrawShowForAll(armourText);
// Обновление каждую секунду
SetTimer("UpdateTextDraws", 1000, true);
return 1;
}
forward UpdateTextDraws();
public UpdateTextDraws()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
new Float:health, Float:armour;
GetPlayerHealth(i, health);
GetPlayerArmour(i, armour);
new string[32];
format(string, sizeof(string), "Health: %.0f", health);
TextDrawSetString(healthText, string);
format(string, sizeof(string), "Armour: %.0f", armour);
TextDrawSetString(armourText, string);
}
}
}
Свойства TextDraw
Код:
new Text:myTextDraw = TextDrawCreate(320.0, 240.0, "Text");
// Шрифт (0-3)
TextDrawFont(myTextDraw, 1);
// Размер букв
TextDrawLetterSize(myTextDraw, 0.5, 2.0);
// Цвет текста
TextDrawColor(myTextDraw, 0xFFFFFFFF);
// Цвет фона (для шрифта 0)
TextDrawBackgroundColor(myTextDraw, 0x000000FF);
// Выравнивание (0-3)
TextDrawAlignment(myTextDraw, 2); // по центру
// Ширина и высота (для шрифта 0)
TextDrawTextSize(myTextDraw, 100.0, 50.0);
// Обводка
TextDrawSetOutline(myTextDraw, 1);
// Тень
TextDrawSetShadow(myTextDraw, 1);
// Использование ящика
TextDrawUseBox(myTextDraw, 1);
TextDrawBoxColor(myTextDraw, 0x000000AA);
// Пропорциональность (для шрифта 0)
TextDrawSetProportional(myTextDraw, 1);
// Выбор стиля (для шрифта 1-3)
TextDrawSetSelectable(myTextDraw, 1);
Показ и скрытие
Код:
// Показать всем
TextDrawShowForAll(myTextDraw);
// Показать игроку
TextDrawShowForPlayer(playerid, myTextDraw);
// Скрыть у всех
TextDrawHideForAll(myTextDraw);
// Скрыть у игрока
TextDrawHideForPlayer(playerid, myTextDraw);
Пример: HUD интерфейс
Код:
new Text:healthBar;
new Text:armourBar;
new Text:moneyText;
new Text:levelText;
CreateHUD()
{
// Полоса здоровья
healthBar = TextDrawCreate(548.0, 63.0, "LD_SPAC:white");
TextDrawTextSize(healthBar, 52.0, 4.0);
TextDrawAlignment(healthBar, 1);
TextDrawColor(healthBar, 0xFF0000FF);
TextDrawUseBox(healthBar, 1);
TextDrawBoxColor(healthBar, 0x000000FF);
TextDrawSetShadow(healthBar, 0);
TextDrawSetOutline(healthBar, 0);
TextDrawFont(healthBar, 4);
TextDrawSetProportional(healthBar, 1);
TextDrawShowForAll(healthBar);
// Полоса брони
armourBar = TextDrawCreate(548.0, 70.0, "LD_SPAC:white");
TextDrawTextSize(armourBar, 52.0, 4.0);
TextDrawAlignment(armourBar, 1);
TextDrawColor(armourBar, 0x0000FFFF);
TextDrawUseBox(armourBar, 1);
TextDrawBoxColor(armourBar, 0x000000FF);
TextDrawSetShadow(armourBar, 0);
TextDrawSetOutline(armourBar, 0);
TextDrawFont(armourBar, 4);
TextDrawSetProportional(armourBar, 1);
TextDrawShowForAll(armourBar);
// Текст денег
moneyText = TextDrawCreate(548.0, 80.0, "$0");
TextDrawFont(moneyText, 3);
TextDrawLetterSize(moneyText, 0.3, 1.2);
TextDrawColor(moneyText, 0x00FF00FF);
TextDrawSetOutline(moneyText, 1);
TextDrawSetShadow(moneyText, 1);
TextDrawAlignment(moneyText, 1);
TextDrawShowForAll(moneyText);
// Текст уровня
levelText = TextDrawCreate(548.0, 95.0, "Level: 1");
TextDrawFont(levelText, 1);
TextDrawLetterSize(levelText, 0.3, 1.2);
TextDrawColor(levelText, 0xFFFFFFFF);
TextDrawSetOutline(levelText, 1);
TextDrawSetShadow(levelText, 1);
TextDrawAlignment(levelText, 1);
TextDrawShowForAll(levelText);
}
UpdateHUD(playerid)
{
new Float:health, Float:armour;
GetPlayerHealth(playerid, health);
GetPlayerArmour(playerid, armour);
// Обновление полосы здоровья
new healthWidth = floatround((health / 100.0) * 52.0);
TextDrawTextSize(healthBar, float(healthWidth), 4.0);
TextDrawShowForPlayer(playerid, healthBar);
// Обновление полосы брони
new armourWidth = floatround((armour / 100.0) * 52.0);
TextDrawTextSize(armourBar, float(armourWidth), 4.0);
TextDrawShowForPlayer(playerid, armourBar);
// Обновление денег
new string[32];
format(string, sizeof(string), "$%d", GetPlayerMoney(playerid));
TextDrawSetString(moneyText, string);
TextDrawShowForPlayer(playerid, moneyText);
// Обновление уровня
format(string, sizeof(string), "Level: %d", PlayerInfo[playerid][pLevel]);
TextDrawSetString(levelText, string);
TextDrawShowForPlayer(playerid, levelText);
}
public OnPlayerUpdate(playerid)
{
UpdateHUD(playerid);
return 1;
}
Кликабельные TextDraw
Код:
new Text:buttonText;
public OnGameModeInit()
{
buttonText = TextDrawCreate(320.0, 300.0, "Нажмите здесь");
TextDrawFont(buttonText, 1);
TextDrawLetterSize(buttonText, 0.5, 2.0);
TextDrawColor(buttonText, 0xFFFFFFFF);
TextDrawSetOutline(buttonText, 1);
TextDrawSetShadow(buttonText, 1);
TextDrawSetSelectable(buttonText, 1);
TextDrawShowForAll(buttonText);
return 1;
}
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(clickedid == buttonText)
{
SendClientMessage(playerid, -1, "Вы нажали на кнопку!");
CancelSelectTextDraw(playerid);
}
return 1;
}
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
// Обработка клика по персональному TextDraw
return 1;
}
Персональные TextDraw
Код:
new PlayerText:playerHUD[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
playerHUD[playerid] = CreatePlayerTextDraw(playerid, 100.0, 100.0, "Text");
PlayerTextDrawFont(playerid, playerHUD[playerid], 1);
PlayerTextDrawLetterSize(playerid, playerHUD[playerid], 0.5, 2.0);
PlayerTextDrawColor(playerid, playerHUD[playerid], 0xFFFFFFFF);
PlayerTextDrawSetOutline(playerid, playerHUD[playerid], 1);
PlayerTextDrawShow(playerid, playerHUD[playerid]);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
PlayerTextDrawDestroy(playerid, playerHUD[playerid]);
return 1;
}
Важные моменты:
- Уничтожайте TextDraw при выходе игрока
- Обновляйте TextDraw регулярно для динамических данных
- Используйте персональные TextDraw для индивидуальных данных
- Оптимизируйте количество TextDraw для производительности
TextDraw создает красивый и функциональный интерфейс!