Skylarker Posted May 22, 2018 Share Posted May 22, 2018 Ребят, подскажите пожалуйста, как оптимально сделать текст с задним фоном над головами персонажей, чтобы не сильно сажало 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
K1parik Posted May 23, 2018 Share Posted May 23, 2018 https://wiki.multitheftauto.com/wiki/DxDrawRectangle Link to comment
anufis_ok Posted June 4, 2018 Share Posted June 4, 2018 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
Kenix Posted June 4, 2018 Share Posted June 4, 2018 + Определить все функции локальными переменными. Link to comment
Skylarker Posted July 12, 2018 Author Share Posted July 12, 2018 On 04.06.2018 at 22:07, Kenix said: + Определить все функции локальными переменными. Спасибо за советы, но всё же как это влияет на производительность? И что если файлов со скриптами в ресурсе по одному - клиентский и серверный, имеет ли тогда смысл объявлять функцию локальной? Link to comment
Kenix Posted July 13, 2018 Share Posted July 13, 2018 (edited) При вызове рендера у вас происходит вызов функции глобальной. Чтобы это оптимизировать вы объявляете функцию локальной. Т.е чтобы добиться максимального эффекта вы можете сделать в одном ресурсе (в одном скрипте) следующее: 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 July 13, 2018 by Kenix Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now