Jump to content

Problema con DxRectangle


Recommended Posts

Hola, tengo un problema con DXRectangle, estoy tratando de hacer una barra que vaya progresando, me tira error del tercer argumento

  
local screenW, screenH = guiGetScreenSize() 
local i = 0 
function render() 
   i=i+0.4 
   if i >= 300 then 
removeEventHandler("onClientRender", root, drawing) 
end 
end 
addEventHandler("onClientRender", root, drawing) 
     
     
function drawing()   
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, i, 25, tocolor(144, 3, 3, 255), true) 
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, 300, 25, tocolor(0, 0, 0, 130), true) 
end 
  

Gracias a los que ayuden :)

Link to comment

La función render que es la que sube el progreso, por lo visto no tiene ningún ejecutor, por lo tanto, i es igual a nil. Dame unos minutos y te posteo un ejemplo.

local x, y = guiGetScreenSize( ) 
local progreso_barra = 0 
  
function renderizar_progreso( ) 
    progreso_barra = progreso_barra + 0.4 
    if i >= 300 then 
        removeEventHandler( "onClientRender", root, renderizar_barras ) 
        removeEventHandler( "onClientRender", root, renderizar_progreso ) 
    end 
end 
addEventHandler( "onClientRender", root, renderizar_progreso ) 
  
function renderizar_barras( ) 
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, 300, 25, tocolor(0, 0, 0, 130), true) 
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, i, 25, tocolor(144, 3, 3, 255), true) 
end 
addEventHandler( "onClientRender", root, renderizar_barras ) 

La sombra del dx, dibújala siempre antes de la barra, para que quede atrás.

Link to comment
Eso va por orden, lo ultimo que escribes en el codigo es lo que queda en frente.

Hice eso pero a medida q la barra va pasando se queda abajo el texto

  
function renderizar_progreso( ) 
    progreso_barra = progreso_barra + 0.4 
    if progreso_barra >= 300 then 
        removeEventHandler( "onClientRender", root, renderizar_barras ) 
        removeEventHandler( "onClientRender", root, renderizar_progreso ) 
    end 
end 
addEventHandler( "onClientRender", root, renderizar_progreso ) 
  
function renderizar_barras( ) 
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, 300, 25, tocolor(0, 0, 0, 160), true) 
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, progreso_barra, 25, tocolor(0, 255, 0, 255), true) 
    dxDrawBorderedText ("Drogandose",(screenWidth - 15) / 2 -120, (screenHeight - 10) / 2, screenWidth, screenHeight, tocolor ( 0, 0, 0, 255 ), 2, "sans" ) 
  dxDrawText ("Drogandose",(screenWidth - 15) / 2 -120, (screenHeight - 10) / 2, screenWidth, screenHeight, tocolor ( 255, 255, 255, 255 ), 2, "sans" ) 
end 
addEventHandler( "onClientRender", root, renderizar_barras ) 
  
  

Solucionado, gracias a los 2

Link to comment
Eso va por orden, lo ultimo que escribes en el codigo es lo que queda en frente.

Hice eso pero a medida q la barra va pasando se queda abajo el texto

  
function renderizar_progreso( ) 
    progreso_barra = progreso_barra + 0.4 
    if progreso_barra >= 300 then 
        removeEventHandler( "onClientRender", root, renderizar_barras ) 
        removeEventHandler( "onClientRender", root, renderizar_progreso ) 
    end 
end 
addEventHandler( "onClientRender", root, renderizar_progreso ) 
  
function renderizar_barras( ) 
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, 300, 25, tocolor(0, 0, 0, 160), true) 
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, progreso_barra, 25, tocolor(0, 255, 0, 255), true) 
    dxDrawBorderedText ("Drogandose",(screenWidth - 15) / 2 -120, (screenHeight - 10) / 2, screenWidth, screenHeight, tocolor ( 0, 0, 0, 255 ), 2, "sans" ) 
  dxDrawText ("Drogandose",(screenWidth - 15) / 2 -120, (screenHeight - 10) / 2, screenWidth, screenHeight, tocolor ( 255, 255, 255, 255 ), 2, "sans" ) 
end 
addEventHandler( "onClientRender", root, renderizar_barras ) 
  
  

Solucionado, gracias a los 2

No sería más simple dejar en un solo render los dos?

No habría ningún problema & así es menos funciones a lo loco xD

Link to comment
Eso va por orden, lo ultimo que escribes en el codigo es lo que queda en frente.

Hice eso pero a medida q la barra va pasando se queda abajo el texto

  
function renderizar_progreso( ) 
    progreso_barra = progreso_barra + 0.4 
    if progreso_barra >= 300 then 
        removeEventHandler( "onClientRender", root, renderizar_barras ) 
        removeEventHandler( "onClientRender", root, renderizar_progreso ) 
    end 
end 
addEventHandler( "onClientRender", root, renderizar_progreso ) 
  
function renderizar_barras( ) 
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, 300, 25, tocolor(0, 0, 0, 160), true) 
   dxDrawRectangle((screenW - 23) / 2-131, (screenH - 10) / 2, progreso_barra, 25, tocolor(0, 255, 0, 255), true) 
    dxDrawBorderedText ("Drogandose",(screenWidth - 15) / 2 -120, (screenHeight - 10) / 2, screenWidth, screenHeight, tocolor ( 0, 0, 0, 255 ), 2, "sans" ) 
  dxDrawText ("Drogandose",(screenWidth - 15) / 2 -120, (screenHeight - 10) / 2, screenWidth, screenHeight, tocolor ( 255, 255, 255, 255 ), 2, "sans" ) 
end 
addEventHandler( "onClientRender", root, renderizar_barras ) 
  
  

Solucionado, gracias a los 2

No sería más simple dejar en un solo render los dos?

No habría ningún problema & así es menos funciones a lo loco xD

Yo también pensé en eso, y claro haría mas simple hacer todo en un solo render, pero no seria lo mas optimo si es que el render fuese infinito. Estaría consultando un if innecesariamente. Ahora si es un caso particular como creo que es este, no habría problema en hacer todo en un if.

Link to comment
  • Recently Browsing   0 members

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