Jump to content

Текст с черным фоном


Recommended Posts

Ребят, подскажите пожалуйста, как оптимально сделать текст с задним фоном над головами персонажей, чтобы не сильно сажало FPS. Нашёл вот такую функцию, но она выполняет 4 дополнительные отрисовки, вместо одной что не очень скажется на производительности, особенно когда в кадре будет много персонажей.

 

function dxDrawFramedText ( message , left , top , width , height , color , scale , font , alignX , alignY , clip , wordBreak , postGUI )
    dxDrawText ( message , left + 1 , top + 1 , width + 1 , height + 1 , tocolor ( 0 , 0 , 0 , 255 ) , scale , font , alignX , alignY , clip , wordBreak , postGUI )
    dxDrawText ( message , left + 1 , top - 1 , width + 1 , height - 1 , tocolor ( 0 , 0 , 0 , 255 ) , scale , font , alignX , alignY , clip , wordBreak , postGUI )
    dxDrawText ( message , left - 1 , top + 1 , width - 1 , height + 1 , tocolor ( 0 , 0 , 0 , 255 ) , scale , font , alignX , alignY , clip , wordBreak , postGUI )
    dxDrawText ( message , left - 1 , top - 1 , width - 1 , height - 1 , tocolor ( 0 , 0 , 0 , 255 ) , scale , font , alignX , alignY , clip , wordBreak , postGUI )
    dxDrawText ( message , left , top , width , height , color , scale , font , alignX , alignY , clip , wordBreak , postGUI )
end

 

Link to comment
  • 2 weeks later...
function dxDrawFramedText ( message , left , top , width , height , color , scale , font , alignX , alignY , clip , wordBreak , postGUI )
    dxDrawText ( message , left + 1 , top + 1 , width + 1 , height + 1 , tocolor ( 0 , 0 , 0 , 255 ) , scale , font , alignX , alignY , clip , wordBreak , postGUI )
    dxDrawText ( message , left , top , width , height , color , scale , font , alignX , alignY , clip , wordBreak , postGUI )
end

 

Link to comment
  • 1 month later...
On 04.06.2018 at 22:07, Kenix said:

+ Определить все функции локальными переменными.

Спасибо за советы, но всё же как это влияет на производительность? И что если файлов со скриптами в ресурсе по одному - клиентский и серверный, имеет ли тогда смысл объявлять функцию локальной?

Link to comment

При вызове рендера у вас происходит вызов функции глобальной. Чтобы это оптимизировать вы объявляете функцию локальной.

Т.е чтобы добиться максимального эффекта вы можете сделать в одном ресурсе (в одном скрипте) следующее:

 

local tocolor = tocolor;
local dxDrawText = dxDrawText;

local function dxDrawFramedText ( message , left , top , width , height , color , scale , font , alignX , alignY , clip , wordBreak , postGUI )
    dxDrawText ( message , left + 1 , top + 1 , width + 1 , height + 1 , tocolor ( 0 , 0 , 0 , 255 ) , scale , font , alignX , alignY , clip , wordBreak , postGUI )
    dxDrawText ( message , left , top , width , height , color , scale , font , alignX , alignY , clip , wordBreak , postGUI )
end

addEventHandler( "onClientRender", root, 
	function()
		-- Тут вызываете dxDrawFramedText
	end
);


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

 

Quote

И что если файлов со скриптами в ресурсе по одному - клиентский и серверный, имеет ли тогда смысл объявлять функцию локальной?

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

UPD:
То что я показал это самый быстрый вариант, далее по убыванию более худшие это:
- Вызов глобальной функции (которая находится в другом скрипте, в том же ресурсе).
- Использование OOP - метатаблиц. В Lua оно не особо быстрое, особенно в циклах.
- Вызов функции, которая в другом ресурсе. Через call/exports[ "resourse" ]:Функция( аргументы ); Тоже занимает какое-то время.
- Также занимает время вызов из Lua функции C++ (что мта и делает), но тут вы уже ничего не сделаете, даже попытка разработчиков MTA внедртить LuaJIT не имеет смысла.

Такие хаки следует использовать на критичных по производительности местах (рендер и большие циклы). В обычном случае такого делать не стоит, вы только усложните все.

Вроде ответил очень подробно, но если у вас есть вопросы то пишите.

Edited by Kenix
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...