Skip to content

Example_Ru

Uladzislau Nikalayevich edited this page Sep 4, 2022 · 1 revision

Базовой вещью является таблица стилей. Именно в ней происходит основное наследование классов.

helpStyle = {
	text = {
		font = DxFont( 'fonts/GothaProReg.ttf', 6 );
		color = 0xFFFFFFFF;
	};
	textBigBold = {
		parent = 'text';
		font = DxFont( 'HUD/fonts/GothaProBol.ttf', 30 );
	};
}

В данной таблице для базового класса "text" установлен шрифт "GothaProReg" и белый цвет. Все созданные объекты с классом "text" будут иметь белый цвет и данный шрифт. Далее идет описание класса "textBigBold". parent = 'text' означает, что он будет наследоваться от класса "text". При этом он наследует от него все методы и параметры, кроме шрифта, так как он переопределен следующей строкой.

Следующим важным классом является dxConstruction. Этот класс отвечает за порядок отрисовки объектов, передачу событий и другой менеджмент. Корневым объектом для конструкций на дисплее является dxConstruction.screen.

Anim{
	name = 'updateMoneyText';

	create = function( self, gui )
		return self
	end;

	update = function( self, gui )
		gui:setText( tostring( localPlayer:getMoney() ) .. '$' )
		return true
	end;
}

PlayerHUD = dxConstruction{ x = dxConstruction.screen.w - 30 - 466, y = 40, w = 466, h = 140;
	objects = {

		background = { p = 1, type = 'image', x = 0, y = 0, image = 'HUD/images/PlayerHUD/background.png' };

		{ type = 'textBigBold', x = 46, y = 15, w = 114, h = 15, text = 'Welcome', alignX = 'center', alignY = 'center' };

		moneyText = { type = 'text',  x = 22, y = 50, w = 156, h = 22, alignX = 'center', alignY = 'center',
			anims = {
				{ 'updateMoneyText' };
			};
		};
	};
	anims = {
		{ 'softShow', 500 };
	};
	style = myStyle;
	show = false;
}

Сначала рассмотрим конструкцию. Здесь, используя корневую конструкцию, установлено смещение от правого края экрана на 30 пикселей. Во вложенной таблице objects прописаны параметры создаваемых объектов. В объекте background параметр "р" обозначает слой, на котором лежит объект. В данном случае это первый слой, все остальные объекты будут рисоваться над этим объектом. Если вы устанавливайте слои другим объектам в пределах данной конструкции, прослеживайте, чтобы сохранялся порядок от единицы и не было промежутков. Параметры w и h здесь не заданы и не наследуются, поэтому объект будет растянут от точки установки, в данном случае на всю конструкцию. Далее описание анонимного объекта класса "textBigBold". Текст объекта будет "Welcome", отцентрированный по центру, а так же с большим жирным шрифтом и белым цветом из-за прописанного в myStyle. Ниже прописан объект moneyText класса "text", так же отцентрированный, белого цвета, но маленький шрифт. Имеет обработчик анимации. Об анимациях позже. После того, как описание объектов окончено, видим, что на конструкции так же можно вешать анимации. Таблица anims имеет формат:

anims = {
   { "ANIM NAME 1", param1, param2, .. param_n };
   { "ANIM NAME 1", param1, param2, .. param_n };
}

Параметр style указывает, какой стиль использовать данной конструкции. Мы используем созданную сверху таблицу myStyle. Параметр show отвечает за рендер конструкции. false - нет, true - да. Сейчас конструкция не отрисовывается на экране. Вызов, включающий отрисовку будет такой:

PlayerHUD:setShow( true )

Так конструкция плавно появится, так как на ней висит анимация softShow, иначе бы она бы просто появилась на экране без какой-либо магии.

Анимации так же могут быть использованы для обновления каких-либо данных, как например "updateMoneyText". Метод create в данном классе вызывается единожды при создании объекта анимации. update Вызывается каждый кадр перед рендером объекта, на которого нацелена анимация. В данном примере анамация создана только для moneyText и вызывает в нем метод setText для установки текущего счета игрока в текст объекта. Анимация каждый кадр возвращает true, что означает вечное ее выполнение. Если анимация ничего не возвратит, или возвратит false или nil, она будет автоматически удалена с объекта. Например, как анимация move в данной библиотеке.

Clone this wiki locally