Перейти к содержимому


Фотография

Отображение на экране шкалы


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 64

#1 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 18 June 2015 - 17:45

Хочу запилить шкалу на экране, которая будет прибавляться или наоборот снижаться в зависимости от действий игрока.

 

И тут вопрос- через что или как лучше её отобразить на экране игрока.

 

Дальше попытаюсь сам.


Сообщение отредактировал TankiSD: 18 June 2015 - 19:18

  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 18 June 2015 - 17:49

GUI - единственный способ :D Создаешь, вызываешь, настраиваешь

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


Правда потребуется небольшое отличие: нужен не cfgDialogs, а RscTitles и вызывать командой cutRsc :), а так все аналогично "диалогу"
  • 1

#3 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 18 June 2015 - 19:09

Примерно как то так

// config.cpp

class cfgScriptPaths {
	A3SPL_IGUI = "A3SPL\ui\scripts\IGUI\";
};

class RscBackground;
class RscTitle;
class RscProgress;

class RscTitles {

	class RscDisplayPlayerStatus {    
		idd = 6900;
		movingEnable = 0;
		duration = 1000000;
		name = "DisplayPlayerStatus";
		onLoad = "[""onLoad"",_this,""RscDisplayPlayerStatus"",'A3SPL_IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
		onUnload = "[""onUnload"",_this,""RscDisplayPlayerStatus"",'A3SPL_IGUI'] call compile preprocessfilelinenumbers ""A3\ui_f\scripts\initDisplay.sqf""";
		
		class ControlsBackground {
			
			class CA_ContainerBackground : RscBackground {
				idc = 1001;
				x = "47 * 					(			((safezoneW / safezoneH) min 1.2) / 40) + 		(safezoneX + (safezoneW - 					((safezoneW / safezoneH) min 1.2))/2)";
				y = "26.9 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
				w = "12.2 * 					(			((safezoneW / safezoneH) min 1.2) / 40)";
				h = "5.1 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
				colorBackground[] = {0.05, 0.05, 0.05, 0.55};
			};
		};
		
		class controls {	
			
			class DammageTitle : RscTitle {
				idc = 2000;
				colorText[] = {0.5, 0.5, 0.5, 0.9};
				text = "$STR_A3SPL_DAMMAGE";
				x = "47.2 * 					(			((safezoneW / safezoneH) min 1.2) / 40) + 		(safezoneX + (safezoneW - 					((safezoneW / safezoneH) min 1.2))/2)";
				y = "30.8 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
				w = "3.6 * 					(			((safezoneW / safezoneH) min 1.2) / 40)";
				h = "1 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
			};
			class BloodTitle : DammageTitle {
				idc = 2001;
				text = "$STR_A3SPL_BLOOD";
				y = "29.6 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
			};
			class FoodTitle : DammageTitle {
				idc = 2002;
				text = "$STR_A3SPL_FOOD";
				y = "28.4 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
			};
			class DrinkTitle : DammageTitle {
				idc = 2003;
				text = "$STR_A3SPL_DRINK";
				y = "27.2 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
			};
			
			class DammageProgress : RscProgress {
				idc = 6300;
				texture = "";
				textureExt = "";
				colorBar[] = {0.9, 0.9, 0.9, 0.2};
				colorExtBar[] = {1, 1, 1, 1};
				colorFrame[] = {1, 1, 1, 1};
				x = "51 * 					(			((safezoneW / safezoneH) min 1.2) / 40) + 		(safezoneX + (safezoneW - 					((safezoneW / safezoneH) min 1.2))/2)";
				y = "30.8 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
				w = "8 * 					(			((safezoneW / safezoneH) min 1.2) / 40)";
				h = "1 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
			};
			class BloodProgress : DammageProgress {
				idc = 6301;
				y = "29.6 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
			};
			class FoodProgress : DammageProgress {
				idc = 6302;
				y = "28.4 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
			};
			class DrinkProgress : DammageProgress {
				idc = 6303;
				y = "27.2 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
			};
		};
	};
	
};
// A3SPL\ui\scripts\IGUI\RscDisplayPlayerStatus.sqf

#define CONTROL (_display displayctrl _idc)

disableserialization;
_mode = _this select 0;
_params = _this select 1;
_class = _this select 2;

switch _mode do {
	case "onLoad": {
		with missionNamespace do {
			DisplayPlayerStatus = _params spawn PTm_fnc_playerMonitorDisplayStatus;
		};
	};
	case "onUnload": {
		terminate DisplayPlayerStatus;
	};
};

Как такое выглядит смотрим на видео, правый нижний угол

http://arma3.ru/foru...atform/?p=39666

 

А ещё лучше, скачиваем архив и изучаем в более удобной форме аддон

ui.pbo

http://arma3.ru/foru...&attach_id=2896


  • 1

#4 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 18 June 2015 - 19:16

2329401.jpg


  • 0

#5 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 18 June 2015 - 19:19

Да, коллега, я вас понимаю!

Были времена когда я в зеркале видел такое отражение)


  • 0

#6 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 18 June 2015 - 19:25

Буду изучать.

 

Когда разбираться начинаешь, всё проще становится. 


  • 0

#7 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 18 June 2015 - 19:29

Gui нервы по мотает однозначно, пока разберёшься что куда и как.


  • 0

#8 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 18 June 2015 - 19:34

Ну я сижу, пытаюсь понять, откуда начать) 


  • 0

#9 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 18 June 2015 - 19:38

Спартанский минимум

class RscProgress;

class RscTitles {

	class RscDisplayPlayerStatus {    
		idd = 6900;
		movingEnable = 0;
		duration = 1000000;
		name = "DisplayPlayerStatus";
		
		// Эта строка вызывает код который будет обновлять отображаемые данные, когда вы вызываете этот дисплей, дисплей вызывает указанный скрипт
		onLoad = "[_this] call compile preprocessfilelinenumbers ""путьДоСкрипта\RscDisplayPlayerStatus.sqf""";
		
		// Тоже самое только когда дисплей сворачивается
		onUnload = "";
		
		class ControlsBackground {
			// основание (фон) на фоне которого будут отображаться остальные контролсы
			class CA_ContainerBackground : RscBackground {
				idc = 1001;
				x = "47 * 					(			((safezoneW / safezoneH) min 1.2) / 40) + 		(safezoneX + (safezoneW - 					((safezoneW / safezoneH) min 1.2))/2)";
				y = "26.9 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
				w = "12.2 * 					(			((safezoneW / safezoneH) min 1.2) / 40)";
				h = "5.1 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
				colorBackground[] = {0.05, 0.05, 0.05, 0.55};
			};
		};
		
		class controls {
			// сам прогресс бар и его настройки
			class DammageProgress : RscProgress {
				idc = 6300;
				texture = "";
				textureExt = "";
				colorBar[] = {0.9, 0.9, 0.9, 0.2};
				colorExtBar[] = {1, 1, 1, 1};
				colorFrame[] = {1, 1, 1, 1};
				x = "51 * 					(			((safezoneW / safezoneH) min 1.2) / 40) + 		(safezoneX + (safezoneW - 					((safezoneW / safezoneH) min 1.2))/2)";
				y = "30.8 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
				w = "8 * 					(			((safezoneW / safezoneH) min 1.2) / 40)";
				h = "1 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
			};
		};
	};
};

Сообщение отредактировал SteelRat: 18 June 2015 - 19:39

  • 1

#10 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 18 June 2015 - 19:38

TankiSD, начните с простого диалога: нажми кнопочку что бы его закрыть, после создайте что то покрупнее и т д
  • 1

#11 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 18 June 2015 - 19:42

ЗЫ

onLoad = "[_this] call compile preprocessfilelinenumbers ""путьДоСкрипта\RscDisplayPlayerStatus.sqf""";

_this это передаваемая в вызываемый скрипт ссылка на дисплей.


TankiSD, начните с простого диалога: нажми кнопочку что бы его закрыть, после создайте что то покрупнее и т д

В принципе то что ему нужно не далеко ушло от нажатой кнопки)


  • 1

#12 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 18 June 2015 - 19:44

Всё понял.

 

Сейчас буду разбираться товарищи! 

 

О результатах доложу! 


  • 0

#13 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 18 June 2015 - 21:26

Собственно... а что есть что?

 

т.е. что за RscDisplayPlayerStatus.sqf 

 

и диалог прописывать как .hpp?

 

Потому что я по всякому прописывал, толку ноль.

 

Из дискрипшина вообще вылетает.

 

20040origi_8665679_14811944.jpg


Сообщение отредактировал TankiSD: 18 June 2015 - 23:16

  • 0

#14 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 19 June 2015 - 03:42

 

т.е. что за RscDisplayPlayerStatus.sqf 

Код в этом скрипте будет обновлять показания вашего прогресс бара, можете дать ему какое угодно название.


 

и диалог прописывать как .hpp?

Это смотря куда и как его пихать.

Если в description.ext то

class RscProgress;
class RscBackground;

class RscTitles {
	
	// Имя классу даёте какое по вкусу
	class RscDisplayPlayerStatus {
		// тут собственно описывается сам дисплей
	};
};

  • 0

#15 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 19 June 2015 - 05:13

ЗЫ

Короче, я принимаю для себя простую истину, приятнее заниматься рисованием, по мне, через аддон, писанины меньше.


  • 0

#16 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 19 June 2015 - 21:48

Это я понял.

 

Я не понял то, как обзывается файл, в котором прописывается "спартанский минимум" и как его активировать?


  • 0

#17 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 19 June 2015 - 23:04

TankiSD, обычный description.ext
  • 0

#18 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 сообщений

Отправлено 19 June 2015 - 23:16

TankiSD, обычный description.ext

 

Так этот код вылетает их дискрипшина

class RscProgress;

class RscTitles {

	class RscDisplayPlayerStatus {    
		idd = 6900;
		movingEnable = 0;
		duration = 1000000;
		name = "DisplayPlayerStatus";
		
		// Эта строка вызывает код который будет обновлять отображаемые данные, когда вы вызываете этот дисплей, дисплей вызывает указанный скрипт
		onLoad = "[_this] call compile preprocessfilelinenumbers ""путьДоСкрипта\RscDisplayPlayerStatus.sqf""";
		
		// Тоже самое только когда дисплей сворачивается
		onUnload = "";
		
		class ControlsBackground {
			// основание (фон) на фоне которого будут отображаться остальные контролсы
			class CA_ContainerBackground : RscBackground {
				idc = 1001;
				x = "47 * 					(			((safezoneW / safezoneH) min 1.2) / 40) + 		(safezoneX + (safezoneW - 					((safezoneW / safezoneH) min 1.2))/2)";
				y = "26.9 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
				w = "12.2 * 					(			((safezoneW / safezoneH) min 1.2) / 40)";
				h = "5.1 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
				colorBackground[] = {0.05, 0.05, 0.05, 0.55};
			};
		};
		
		class controls {
			// сам прогресс бар и его настройки
			class DammageProgress : RscProgress {
				idc = 6300;
				texture = "";
				textureExt = "";
				colorBar[] = {0.9, 0.9, 0.9, 0.2};
				colorExtBar[] = {1, 1, 1, 1};
				colorFrame[] = {1, 1, 1, 1};
				x = "51 * 					(			((safezoneW / safezoneH) min 1.2) / 40) + 		(safezoneX + (safezoneW - 					((safezoneW / safezoneH) min 1.2))/2)";
				y = "30.8 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + 		(safezoneY + (safezoneH - 					(			((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
				w = "8 * 					(			((safezoneW / safezoneH) min 1.2) / 40)";
				h = "1 * 					(			(			((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
			};
		};
	};
};

  • 0

#19 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 19 June 2015 - 23:28

TankiSD, значит в коде ошибка - так сложно прочить что написано в окне ошибки?
  • 0

#20 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 20 June 2015 - 03:27

И так друзья мои, я частенько упускаю из виду один нюанс, файл миссии description.ext это такой умственно отсталый config.cpp.

То есть, что бы ваш GUI описанный в дескрипшен работал как надо нужно этот GUI описать так сказать от и до.

А если лепить GUI из аддона, то можно его лепить на базе уже готовых классов лежащих в ui_f.pbo армы.

Так что в том виде в каком я предложил не прокатит.


Сообщение отредактировал SteelRat: 20 June 2015 - 03:28

  • 0




Яндекс.Метрика