PDA

Просмотр полной версии : [Урок] По созданию кликабельных текстдравов



Nurick
14.07.2014, 02:24
Для начало нам потребуется:
√ 1. iPLEOMAX's TextDraw Editor - Скачать (http://www.mediafire.com/download/1zrcdxaseycesey/iPLEOMAX's+TextDraw+Editor+(All).rar)
√ 2. TXD_WorkShop - Скачать (https://yadi.sk/d/73tEXCQUWXZqf)

Далее идём в корневую папку с игрой GTA San Andreas(Program Files - Rockstar Games - GTA San Andreas - models - txd)
Видим наши библиотеки текстур:
http://s020.radikal.ru/i710/1407/4e/8bf55d41b90a.png
Теперь нам потребуется открыть наши библиотеки с помощью программы TXD_WorkShop.
Распаковываем наш TXD_WorkShop, открываем txdworkshop.exe:
http://i023.radikal.ru/1407/4b/910e53c8bed4.png
Далле просто переносим одну из наших библиотек:
http://s020.radikal.ru/i708/1407/c2/d5cde28c482a.png
http://s020.radikal.ru/i715/1407/ad/425048f2009b.png
Теперь запускаем наш filterscripts iPLEOMAX's TextDraw Editor:
http://s020.radikal.ru/i706/1407/ae/26639e25132f.png
http://s04.radikal.ru/i177/1407/b5/05e151735dc6.png
http://s018.radikal.ru/i524/1407/46/f186e0264e46.png
http://i016.radikal.ru/1407/c2/58cc5ed9021b.png
http://s52.radikal.ru/i137/1407/90/8bab7551144c.png
http://s019.radikal.ru/i642/1407/a3/4ca96771cbbe.png
Теперь открываем нашу корневую папку iPLEOMAX's TextDraw Editor - SAMP 0.3e Server - scriptfiles - TD_Test(С помощью pawno редактора, блокнота, Notepad++)
Получаем данный код:

new Text:Textdraw0;


Textdraw0 = TextDrawCreate(524.375000, 256.083374, "LD_CARD:cd9c");
TextDrawLetterSize(Textdraw0, 0.000000, 0.000000);
TextDrawTextSize(Textdraw0, 63.125000, 93.333351);
TextDrawAlignment(Textdraw0, 1);
TextDrawColor(Textdraw0, -1);
TextDrawSetShadow(Textdraw0, 0);
TextDrawSetOutline(Textdraw0, 0);
TextDrawFont(Textdraw0, 4);


Теперь сделаем наш Textdraw чтобы при нажатии он выполнял действие:
Ко всем глобалным переменным добавим:

new Text:Textdraw0;// Глобальная переменная
Далее public OnGameModeInit():

Textdraw0 = TextDrawCreate(524.375000, 256.083374, "LD_CARD:cd9c");// Создает textdraw
TextDrawLetterSize(Textdraw0, 0.000000, 0.000000);// Устанавливает ширину и высоту букв.
TextDrawTextSize(Textdraw0, 63.125000, 93.333351);//Изменяет размер textdraw'a
TextDrawAlignment(Textdraw0, 1);// Устанавливает выравнивание текста
TextDrawColor(Textdraw0, -1); //Цвет
TextDrawSetShadow(Textdraw0, 0);// Устанавливает Размер textdraw'a текста тень
TextDrawSetOutline(Textdraw0, 0);// Устанавливает толщину textdraw'a текст контура
TextDrawFont(Textdraw0, 4); // Шрифт текста
TextDrawSetSelectable(Textdraw0, 1); // Задает текст
Теперь в public OnPlayerClickTextDraw(playerid, Text:clickedid):

if(clickedid == Textdraw0)// название нашей переменной
{
ShowPlayerDialog(playerid, 1001, DIALOG_STYLE_MSGBOX, "Карта", "Вы выбрали карту девять крести", "Готово", "");
TextDrawHideForPlayer(playerid, Textdraw0);// Скрывает textdraw для конкретного игрока.
CancelSelectTextDraw(playerid);// Вызывается при нажатии на TextDraw или отмене режима выбора (ESC).
}
Далее создадим простую команду для убеждения работы нашего Textdraw'a:
В public OnPlayerCommandText(playerid, cmdtext[]):

if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
TextDrawShowForPlayer(playerid, Textdraw0); // Показывает textdraw для конкретного игрока.
SelectTextDraw(playerid, 0xFF4040AA); // Отображения курсора, и позволяет игроку выбирать в textdraw
return 1;
}
http://s003.radikal.ru/i204/1407/6c/9824f369bc7d.png
http://i055.radikal.ru/1407/74/a6ee08e46703.png
http://s004.radikal.ru/i206/1407/73/ab92b1413353.png
http://s43.radikal.ru/i099/1407/5a/b0680d4d67b7.png

Данный урок делался по просьбе одного из пользователей портала Pro-Pawn

Gressie
14.07.2014, 02:29
Понравилось.

Spectrum
14.07.2014, 10:13
TextDrawTextSize(Textdraw0, 63.125000, 93.333351);//Изменяет размер textdraw'a
размер текстдрава задаётся в TextDrawLetterSize, в данном случае TextSize используется для ограничения кликабельной области для текстдрава, а вообще - попробуй сделать несколько текстдравов

Nurick
14.07.2014, 12:31
TextDrawLetterSize
Изменяет ширину и высоту букв.

TextDrawTextSize
изменят размер Box'a, textur

Spectrum
14.07.2014, 12:44
Изменяет ширину и высоту букв.
а это не размер?

Nurick
14.07.2014, 13:02
Размер, так просто я не понял для чего ты написал размер текстдрава задаётся в TextDrawLetterSize, и поэтому решил разъяснить

Spectrum
14.07.2014, 13:28
Размер, так просто я не понял для чего ты написал размер текстдрава задаётся в TextDrawLetterSize, и поэтому решил разъяснить


TextDrawTextSize(Textdraw0, 63.125000, 93.333351);//Изменяет размер textdraw'a

в данном случае TextSize используется для ограничения кликабельной области для текстдрава
Если ты неверно настроишь TextSize - у тебя будет либо выделятся несколько текстдравов, либо вообще ничего не будет выделятся

Nurick
14.07.2014, 13:34
Если ты неверно настроишь TextSize - у тебя будет либо выделятся несколько текстдравов, либо вообще ничего не будет выделятся
Почему это?? Так это же просто относятся к размеру.

Spectrum
14.07.2014, 13:36
Почему это?? Так это же просто относятся к размеру.

создай несколько кликабельных текстдравов (3 например), и посмотришь

Nurick
14.07.2014, 13:37
Хорошо, щас проверю

Nurick
14.07.2014, 14:09
new Text: Spectrum[3];


Spectrum[0] = TextDrawCreate(201.875000, 159.833328, "LD_CHAT:thumbup");
Spectrum[1] = TextDrawCreate(241.000000, 159.083374, "LD_CHAT:thumbdn");
Spectrum[2] = TextDrawCreate(282.625000, 159.500045, "LD_CHAT:goodcha");
for(new TD; TD != 3; TD++)
{
TextDrawLetterSize(Spectrum[TD], 0.000000, 0.000000);
TextDrawTextSize(Spectrum[TD], 34.375000, 32.666664);
TextDrawAlignment(Spectrum[TD], 1);
TextDrawColor(Spectrum[TD], -1);
TextDrawSetShadow(Spectrum[TD], 0);
TextDrawSetOutline(Spectrum[TD], 0);
TextDrawFont(Spectrum[TD], 4);
TextDrawSetSelectable(Spectrum[TD], 1);
}


if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
TextDrawShowForPlayer(playerid, Spectrum[0]);
TextDrawShowForPlayer(playerid, Spectrum[1]);
TextDrawShowForPlayer(playerid, Spectrum[2]);
SelectTextDraw(playerid, 0xFF4040AA);
return 1;
}


if(clickedid == Spectrum[0])
{
SendClientMessage(playerid, 0xFF0000AA, "Вы нажали на кнопку Галочка!");
TextDrawHideForPlayer(playerid, Spectrum[0]);
TextDrawHideForPlayer(playerid, Spectrum[1]);
TextDrawHideForPlayer(playerid, Spectrum[2]);
CancelSelectTextDraw(playerid);
}
else if(clickedid == Spectrum[1])
{
SendClientMessage(playerid, 0xFF0000AA, "Вы нажали на кнопку Крестик!");
TextDrawHideForPlayer(playerid, Spectrum[0]);
TextDrawHideForPlayer(playerid, Spectrum[1]);
TextDrawHideForPlayer(playerid, Spectrum[2]);
CancelSelectTextDraw(playerid);
}
else if(clickedid == Spectrum[2])
{
SendClientMessage(playerid, 0xFF0000AA, "Вы нажали на кнопку Смайл!");
TextDrawHideForPlayer(playerid, Spectrum[0]);
TextDrawHideForPlayer(playerid, Spectrum[1]);
TextDrawHideForPlayer(playerid, Spectrum[2]);
CancelSelectTextDraw(playerid);
}

http://s020.radikal.ru/i723/1407/42/d1e02654316b.png
http://s003.radikal.ru/i202/1407/fc/2972990bd0de.png
http://s019.radikal.ru/i630/1407/00/09a9c5ca86ef.png
http://s020.radikal.ru/i713/1407/62/5453b001ac1d.png
http://s020.radikal.ru/i717/1407/51/33492f55431a.png

DeimoS
14.07.2014, 15:07
А теперь

TextDrawTextSize(Spectrum[TD], 34.375000, 32.666664);
поменяй на

TextDrawTextSize(Spectrum[TD], 70.375000, 70.666664);
например

Nurick
14.07.2014, 15:41
А теперь

TextDrawTextSize(Spectrum[TD], 34.375000, 32.666664);
поменяй на

TextDrawTextSize(Spectrum[TD], 70.375000, 70.666664);
например
http://i031.radikal.ru/1407/30/3b381a021469.png
http://s020.radikal.ru/i712/1407/cd/ff627aba0011.png
Ничто не изменилось, только размер текстуры увеличился(мы же его просто увеличили)

Spectrum
14.07.2014, 16:06
получается что TextDrawTextSize устанавливает размеры превью моделей (PreviewModel) и этих текстур, но для текстдравов состоящих из буковок TextDrawTextSize служит для обозначения кликабельной области
пардон если смутил как то, просто я с текстурами не работал, обходился цифробуквенными символами и превьюшками

wAx
14.07.2014, 20:17
Не-не-не ребят. TextDrawTextSize (для текстдравов с текстом (1-3)) работает только при TextDrawAlignment(textdrawid, 2);

Сам раньше мучался по поводу этого вопроса, но потом как-то нашел выход.

- - - Добавлено - - -

А для превьюшек, размер кликабельного поля устанавливает TextDrawTextSize, размер модели устанавливают с помощью TextDrawSetPreviewRot(Text:text, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fZoom);

Spectrum
14.07.2014, 23:23
размер модели устанавливают с помощью TextDrawSetPreviewRot(Text:text, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fZoom);

эта ф-ция изменяет поворот превьюшки

wAx
14.07.2014, 23:25
эта ф-ция изменяет поворот превьюшки

Уверен? Тогда еще раз взгляни на последний параметр.

Nurick
14.07.2014, 23:35
TextDrawSetPreviewRot (http://wiki.sa-mp.com/wiki/TextDrawSetPreviewRot)

Spectrum
15.07.2014, 08:56
Уверен? Тогда еще раз взгляни на последний параметр.


Sets the rotation and zoom of a 3D model preview textdraw.
Wiki

wAx
15.07.2014, 15:50
Ну и? Вики? Че дальше? Слово Zoom знаешь как переводится? Умножение/увеличение.

Spectrum
15.07.2014, 19:06
Ну и? Вики? Че дальше? Слово Zoom знаешь как переводится? Умножение/увеличение.

а, не правильно тебя понял)