AleksCore Posted June 30, 2014 Share Posted June 30, 2014 (edited) Хочу сделать так, как показано на скриншоте (полупрозрачный прямоугольник 'dxDrawRectangle' вокруг healthbar'a и speedbar'a, и, индикатор скорости и денег 'dxDrawText'), только, чтобы при любом разрешении всё было одинаково. Проблема в последнем. Скриншот Альтернативная ссылка на скриншот Edited July 1, 2014 by Guest Link to comment
CocaColaBear Posted June 30, 2014 Share Posted June 30, 2014 Используйте dxSetAspectRatioAdjustmentEnabled Link to comment
AleksCore Posted June 30, 2014 Author Share Posted June 30, 2014 Спасибо, не знал про такую функцию. Но всё же не помогло Link to comment
Memory Posted June 30, 2014 Share Posted June 30, 2014 На самом деле это несложно сделать, просто надо всё последовательно писать. Поставь Rectangle перед жизнями, а остально без разницы. По поводу координат и размеров, отталкивайся от того как считаются координаты и размеры тех же жизней и скорости. Link to comment
AleksCore Posted June 30, 2014 Author Share Posted June 30, 2014 проблема в том, что я понятия не имею как считаются координаты и размеры этих баров (жизни, скорость), т.к. это стандартные бары, которые прорисовываются ресурсом Race. Там пытался рыться, но не разобрался. Разгадка где-то в fancyprogress.lua, race_client.lua, а также возможно и в util_client.lua Может быть проще самому бары эти сделать, хех... Link to comment
Memory Posted June 30, 2014 Share Posted June 30, 2014 Это точно в race_client.lua. Напишите название сервера, где вы это видели. Может и ничего писать не придётся, а так, если что завтра напишу и скину код. Link to comment
AleksCore Posted June 30, 2014 Author Share Posted June 30, 2014 скриншот с моего сервера, но счас, после жЁстких экспериментов - код испорчен Link to comment
AleksCore Posted June 30, 2014 Author Share Posted June 30, 2014 g_ScreenWidth, g_ScreenHeight = guiGetScreenSize() dxDrawRectangle(g_ScreenWidth/1.175390266299357, g_ScreenHeight/18.61818181818182, 130, 120, tocolor(0, 0, 0, 150), false) да вот это хотя бы отцентрировать, а с текстом разберусь по аналогии. Это для разрешения 1280х1024. Начитался всякого. Пробовал переводить и в абсолютные координаты и в относительные, но что-то безуспешно. А задача то простая вроде бы Link to comment
CocaColaBear Posted June 30, 2014 Share Posted June 30, 2014 Посмотрел стандартный ресурс. Он был сделан задолго до функции dxSetAspectRatioAdjustmentEnabled и там под каждое разрешение высчитывается свои координаты при помощи функции resAdjust в util_client.lua. Проще такое же перерисовать самому при помощи dxSetAspectRatioAdjustmentEnabled Link to comment
AleksCore Posted June 30, 2014 Author Share Posted June 30, 2014 Пробовал ранее с помощью resAdjust, тоже не совсем желаемый результат вышел. Link to comment
Memory Posted July 1, 2014 Share Posted July 1, 2014 Сделал, должно работать как надо. Делал, используя вычисления на основе resAdjust и fancyProgress. Подгонял под стандартный hud race мода. Client: local w, h = guiGetScreenSize () local font = "bankgothic" local scale = 0.6 local textHeight = dxGetFontHeight ( scale, font ) local xVel = -67 local yVel = 125 local offShading = 4 local offsetShadings = { {offShading,0},{-offShading,0},{0,offShading},{0,-offShading},{offShading,offShading},{offShading,-offShading},{-offShading,offShading},{-offShading,-offShading} } local wRec = 130 local hRec = 120 local xRec = -62 local yRec = 56 local xMon = -67 local yMon = 150 addEventHandler( "onClientResourceStart", getRootElement( ), function () if w < 1280 and h < 1024 then wRec = math.floor(wRec*w/1280) hRec = math.floor(hRec*w/1280) xRec = math.floor(xRec*w/1280) yRec = math.floor(yRec*w/1280) xVel = math.floor(xVel*w/1280) yVel = math.floor(yVel*w/1280) xMon = math.floor(xMon*w/1280) yMon = math.floor(yMon*w/1280) end if ( xRec < 0 )then xRec = w - wRec + xRec end if ( yRec < 0 )then yRec = h - hRec + yRec end end) function client_render () local v = getPedOccupiedVehicle ( getLocalPlayer() ) if v then dxDrawRectangle(xRec, yRec, wRec, hRec, tocolor(0, 0, 0, 150), false) local PlayerMoney = getElementData ( getLocalPlayer(), "Money" ) local MonTextWidth = dxGetTextWidth ( "$"..PlayerMoney, scale, font ) local xMon2 = w - MonTextWidth + xMon for i, shading in pairs ( offsetShadings ) do dxDrawText ( "$"..PlayerMoney, xMon2+shading[1], yMon+shading[2], xMon2+MonTextWidth, yMon+textHeight, tocolor(0,0,0,255), scale, font, "center", "center" ) end dxDrawText ( "$"..PlayerMoney, xMon2, yMon, xMon2+MonTextWidth, yMon+textHeight, tocolor(0,255,0,255), scale, font, "center", "center" ) local vx, vy, vz = getElementVelocity ( v ) local speed = 1.23 * ( vx^2 + vy^2 + vz^2 ) ^ ( 0.5 ) if speed > 2 then speed = 2 end local rotation = 0 if speed > 0 then rotation = 90 / 1.875 * speed end local origspeed = tostring ( math.floor( ( 90 / 1.875 * ( 1.21827411 * ( vx^2 + vy^2 + vz^2 ) ^ ( 0.5 ) ) ) / 90 * 300 + 0.5 ) ) .. " km/h" local textWidth = dxGetTextWidth ( origspeed, scale, font ) local x = w - textWidth + xVel for i, shading in pairs ( offsetShadings ) do dxDrawText ( tostring(origspeed), x+shading[1], yVel+shading[2], x+textWidth, yVel+textHeight, tocolor(0,0,0,255), scale, font, "center", "center" ) end dxDrawText ( tostring(origspeed), x, yVel, x+textWidth, yVel+textHeight, tocolor(0,100,255,255), scale, font, "center", "center" ) end end addEventHandler("onClientRender", getRootElement(), client_render ) Server (Сохраняет деньги через дату): function updatePlayersMoney ( ) for index, player in ipairs ( getElementsByType "player" ) do setElementData ( player, "Money", getPlayerMoney ( player ) ) end end addEventHandler ( "onResourceStart", getRootElement(), updatePlayersMoney ) setTimer ( updatePlayersMoney, 2500, 0 ) Link to comment
AleksCore Posted July 4, 2014 Author Share Posted July 4, 2014 Подправил, 19 строка, второй аргумент: local w, h = guiGetScreenSize () local font = "bankgothic" local scale = 0.6 local textHeight = dxGetFontHeight ( scale, font ) local xVel = -67 local yVel = 125 local offShading = 4 local offsetShadings = { {offShading,0},{-offShading,0},{0,offShading},{0,-offShading},{offShading,offShading},{offShading,-offShading},{-offShading,offShading},{-offShading,-offShading} } local wRec = 130 local hRec = 120 local xRec = -62 local yRec = 56 local xMon = -67 local yMon = 150 addEventHandler( "onClientResourceStart", resourceRoot, function () if w < 1280 and h < 1024 then wRec = math.floor(wRec*w/1280) hRec = math.floor(hRec*w/1280) xRec = math.floor(xRec*w/1280) yRec = math.floor(yRec*w/1280) xVel = math.floor(xVel*w/1280) yVel = math.floor(yVel*w/1280) xMon = math.floor(xMon*w/1280) yMon = math.floor(yMon*w/1280) end if ( xRec < 0 )then xRec = w - wRec + xRec end if ( yRec < 0 )then yRec = h - hRec + yRec end end) function client_render () local v = getPedOccupiedVehicle ( getLocalPlayer() ) if v then dxDrawRectangle(xRec, yRec, wRec, hRec, tocolor(0, 0, 0, 150), false) local PlayerMoney = getElementData ( getLocalPlayer(), "Money" ) local MonTextWidth = dxGetTextWidth ( "$"..PlayerMoney, scale, font ) local xMon2 = w - MonTextWidth + xMon for i, shading in pairs ( offsetShadings ) do dxDrawText ( "$"..PlayerMoney, xMon2+shading[1], yMon+shading[2], xMon2+MonTextWidth, yMon+textHeight, tocolor(0,0,0,255), scale, font, "center", "center" ) end dxDrawText ( "$"..PlayerMoney, xMon2, yMon, xMon2+MonTextWidth, yMon+textHeight, tocolor(0,255,0,255), scale, font, "center", "center" ) local vx, vy, vz = getElementVelocity ( v ) local speed = 1.23 * ( vx^2 + vy^2 + vz^2 ) ^ ( 0.5 ) if speed > 2 then speed = 2 end local rotation = 0 if speed > 0 then rotation = 90 / 1.875 * speed end local origspeed = tostring ( math.floor( ( 90 / 1.875 * ( 1.21827411 * ( vx^2 + vy^2 + vz^2 ) ^ ( 0.5 ) ) ) / 90 * 300 + 0.5 ) ) .. " km/h" local textWidth = dxGetTextWidth ( origspeed, scale, font ) local x = w - textWidth + xVel for i, shading in pairs ( offsetShadings ) do dxDrawText ( tostring(origspeed), x+shading[1], yVel+shading[2], x+textWidth, yVel+textHeight, tocolor(0,0,0,255), scale, font, "center", "center" ) end dxDrawText ( tostring(origspeed), x, yVel, x+textWidth, yVel+textHeight, tocolor(0,100,255,255), scale, font, "center", "center" ) end end addEventHandler("onClientRender", getRootElement(), client_render ) Иначе будет сдвигаться после каждого запуска левых ресурсов/карт 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