Memory Posted March 26, 2014 Share Posted March 26, 2014 Привет всем, делаю scroll dx текста по колесу мыши. Возможно ли сделать область видимости текста ( dxDrawText ( string text, float left, float top [, float right=left, float bottom=top, ... ) только определённый участок на экране. Схематично на картинке: Белая область - область видимости, всё что выходит за неё должно обрезаться. Но на деле по Y получается только либо с самого верха до центра, либо с самого низа до центра. На данный момент код таков, текст перемещается вверх как надо, но его надо обрезать. local name, t_Header, length1, x1, length2, x2, fileContent local scroll = 0; function welcomeGui() name = getPlayerNameWithOutCode(getLocalPlayer()) t_Header = name..", welcome to [sV] server" length1 = dxGetTextWidth(t_Header, 0.9, DxArial14) x1 = (w_window-length1)/2 local newFile = fileOpen ( "menu/rules.txt", true ) fileContent = fileRead ( newFile, fileGetSize ( newFile ) ) length2 = dxGetTextWidth(fileContent, 0.9, DxArial11) x2 = (w_window-length2)/2 addEventHandler( "onClientRender", root, dx_welcomeGui) end local height_text = 36*20 ---1-строка-20-pix local y_scroll_max = h_window-70 local y_scroll_unit = math.floor(height_text/y_scroll_max) local speed = 8 function dx_welcomeGui() dxDrawText ( "#00FF00"..t_Header, x_window+x1, y_window+20, x1_window, y1_window, tocolor ( 255, 255, 255, 255 ), 0.9, DxArial14, "left", "top", false, false, false, true ) dxDrawText ( fileContent, x_window+x2, y_window+40-scroll, x_window+w_window, y_window+h_window-20, tocolor ( 255, 255, 255, 255 ), 0.9, DxArial11, "left", "top", true, false, false, false ) dxDrawRectangle ( x_window+x_window-10, y_window+20+scroll, 10, 30, tocolor( 255, 255, 255, 255 ) ) end function scroll_up() if ( scroll < y_scroll_max ) then scroll = scroll + y_scroll_unit*speed; end end bindKey("mouse_wheel_down", "down", scroll_up) function scroll_down() if ( scroll > 0 ) then scroll = scroll - y_scroll_unit*speed end end bindKey("mouse_wheel_up", "down", scroll_down) Link to comment
Kernell Posted March 26, 2014 Share Posted March 26, 2014 Копайте в сторону RenderTarget Link to comment
Memory Posted March 26, 2014 Author Share Posted March 26, 2014 Да я видел это, не понял ничего что и как, не объясните ли? Link to comment
TheNormalnij Posted March 26, 2014 Share Posted March 26, 2014 Если оставить текущую реализацию, то как будет, если поставить clip и wordBreak( первые два булевых аргумента у dxDrawText, отвечают за обрезку ) на true. Link to comment
Kernell Posted March 26, 2014 Share Posted March 26, 2014 Да я видел это, не понял ничего что и как, не объясните ли? С помощью RenderTarget ты можешь создать текстуру и рисовать в неё, а потом рисовать эту текстуру с помощью dxDrawImage. В этом примере это и делается https://wiki.multitheftauto.com/wiki/Dx ... nderTarget Если оставить текущую реализацию, то как будет, если поставить clip и wordBreak( первые два булевых аргумента у dxDrawText, отвечают за обрезку ) на true. Это касается самого текста, если он к примеру выходит за пределы своих границ. Тут как я понимаю, вопрос стоит о реализации что-то вроде стандартного чата, только со своими плюшками. Link to comment
Memory Posted March 27, 2014 Author Share Posted March 27, 2014 Всё, кажется понял, спасибо ) Если вопросы будут, напишу. 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