Anzo Posted August 1, 2016 Share Posted August 1, 2016 (edited) Estoy haciendo un panel login en dx, para que se vea más bonito, por ahora solo tengo la parte de los botones que en este caso serían rectangles, tengo para cuando darle click se cambien de color y al pasar el mouse en el rectangle salga un borde de color celeste. Lo que quiero saber es si hay alguna forma de hacer este código más corto (igualmente no es tan largo, pero me refiero a una mejor forma de hacer el script): local screenW, screenH = guiGetScreenSize() local colorForAll = tocolor(0,220,239,255) activo = false function newsLogin ()--Cambio a color azul (rectangle y text, rectangle: Login) dxDrawRectangle(screenW * 0.2125, screenH * 0.3383, screenW * 0.1300, screenH * 0.0517, colorForAll, false)--Login Rectangle dxDrawText("Login", screenW * 0.2325, screenH * 0.3383, screenW * 0.3212, screenH * 0.3850, tocolor(255, 255, 255, 255), 2.00, "default-bold", "left", "top", false, false, false, false, false) end --Al darle click al boton Login se pondrá azul el rectangle y texto [^] y se borraran los otros botones que esten azules. function createNewLoginInformation(_,state) if activo == false then if state == "down" then if isMouseInPosition (screenW * 0.2125, screenH * 0.3383, screenW * 0.1300, screenH * 0.0517) then removeEventHandler("onClientRender", root, loginInformations) removeEventHandler("onClientRender", root, newsRegister) removeEventHandler("onClientRender", root, newsInformations) removeEventHandler("onClientRender", root, mewss) removeEventHandler("onClientRender", root, newCharaterText) addEventHandler("onClientRender", root, newsLogin) addEventHandler("onClientRender", root, newsInformations) addEventHandler("onClientRender", root, registerInformations) addEventHandler("onClientRender", root, characterInformations) end end end end addEventHandler ("onClientClick", root, createNewLoginInformation) --Cambio a color azul (rectangle y text, rectangle: Register) function newsRegister() dxDrawRectangle(screenW * 0.3425, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517,colorForAll, false)--Register Rectangle dxDrawText("Register", screenW * 0.3550, screenH * 0.3383, screenW * 0.4437, screenH * 0.3850, tocolor(255, 255, 255, 255), 2.00, "default-bold", "left", "top", false, false, false, false, false) end --Al darle click al boton Register se pondrá azul el rectangle y texto [^] y se borraran los otros botones que esten azules. function createNewRegisterInformation(_,state) if activo == false then if state == "down" then if isMouseInPosition(screenW * 0.3425, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517) then removeEventHandler("onClientRender", root, newsLogin) removeEventHandler("onClientRender", root, registerInformations) removeEventHandler("onClientRender", root, mewss) removeEventHandler("onClientRender", root, newsInformations) removeEventHandler("onClientRender", root, newCharaterText) addEventHandler("onClientRender", root, newsRegister) addEventHandler("onClientRender", root, newsInformations) addEventHandler("onClientRender", root, loginInformations) addEventHandler("onClientRender", root, characterInformations) end end end end addEventHandler ("onClientClick", root, createNewRegisterInformation) --Cambio a color azul (rectangle y text, rectangle: News) function mewss() dxDrawRectangle(screenW * 0.4875, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517, colorForAll, false)--News Rectangle dxDrawText("News", screenW * 0.5162, screenH * 0.3383, screenW * 0.6050, screenH * 0.3850, tocolor(255, 255, 255, 255), 2.00, "default-bold", "left", "top", false, false, false, false, false) end --Al darle click al boton News se pondrá azul el rectangle y texto [^] y se borraran los otros botones que esten azules. function createNewInformation(_,state) if activo == false then if state == "down" then if isMouseInPosition(screenW * 0.4875, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517) then removeEventHandler("onClientRender", root, newsLogin) removeEventHandler("onClientRender", root, newsRegister) removeEventHandler("onClientRender", root, newsInformations) removeEventHandler("onClientRender", root, newCharaterText) addEventHandler("onClientRender", root, newsInformations) addEventHandler("onClientRender", root, loginInformations) addEventHandler("onClientRender", root, registerInformations) addEventHandler("onClientRender", root, characterInformations) addEventHandler("onClientRender", root, mewss) end end end end addEventHandler ("onClientClick", root, createNewInformation) --Cambio a color azul (rectangle y text, rectangle: Character) function newCharaterText() dxDrawRectangle(screenW * 0.6325, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517, colorForAll, false)--Character Rectangle dxDrawText("Character", screenW * 0.6325, screenH * 0.3383, screenW * 0.7212, screenH * 0.3850, tocolor(255, 255, 255, 255), 1.90, "default-bold", "left", "top", false, false, false, false, false) end --Al darle click al boton Character se pondrá azul el rectangle y texto [^] y se borraran los otros botones que esten azules. function createNewCharacterInformation(_,state) if activo == false then if state == "down" then if isMouseInPosition(screenW * 0.6325, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517) then removeEventHandler("onClientRender", root, characterInformations) removeEventHandler("onClientRender", root, newsRegister) removeEventHandler("onClientRender", root, newsLogin) removeEventHandler("onClientRender", root, mewss) addEventHandler("onClientRender", root, newCharaterText) addEventHandler("onClientRender", root, registerInformations) addEventHandler("onClientRender", root, loginInformations) end end end end addEventHandler("onClientClick", root, createNewCharacterInformation) --Este es el texto y rectangle que aparecerá por defecto al iniciar el script, con createNewLoginInformation se borrará este texto y aparecerá el de newsLogin. function loginInformations() dxDrawRectangle(screenW * 0.2125, screenH * 0.3383, screenW * 0.1300, screenH * 0.0517, tocolor(0, 0, 0, 180), false)--Login Rectangle dxDrawText("Login", screenW * 0.2325, screenH * 0.3383, screenW * 0.3212, screenH * 0.3850, tocolor(255, 255, 255, 255), 2.00, "default-bold", "left", "top", false, false, false, false, false) if isMouseInPosition(screenW * 0.2125, screenH * 0.3383, screenW * 0.1300, screenH * 0.0517) then --Login Lines dxDrawLine((screenW * 0.2125) - 1, (screenH * 0.3383) - 1, (screenW * 0.2125) - 1, screenH * 0.3900, tocolor(0, 255, 239, 255), 1, false) dxDrawLine(screenW * 0.3425, (screenH * 0.3383) - 1, (screenW * 0.2125) - 1, (screenH * 0.3383) - 1, tocolor(0, 255, 239, 255), 1, false) dxDrawLine((screenW * 0.2125) - 1, screenH * 0.3900, screenW * 0.3425, screenH * 0.3900, tocolor(0, 255, 239, 255), 1, false) dxDrawLine(screenW * 0.3425, screenH * 0.3900, screenW * 0.3425, (screenH * 0.3383) - 1, tocolor(0, 255, 239, 255), 1, false) end end addEventHandler("onClientRender", root, loginInformations) --Este es el texto y rectangle que aparecerá por defecto al iniciar el script, con createNewRegisterInformationInformation se borrará este texto y aparecerá el de newsRegister. function registerInformations() dxDrawRectangle(screenW * 0.3425, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517,tocolor(0,0,0,180), false)--Register Rectangle dxDrawText("Register", screenW * 0.3550, screenH * 0.3383, screenW * 0.4437, screenH * 0.3850, tocolor(255, 255, 255, 255), 2.00, "default-bold", "left", "top", false, false, false, false, false) if isMouseInPosition(screenW * 0.3425, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517) then --Register Lines dxDrawLine((screenW * 0.3425) - 1, (screenH * 0.3383) - 1, (screenW * 0.3425) - 1, screenH * 0.3900, tocolor(0, 255, 239, 255), 1, false) dxDrawLine(screenW * 0.4875, (screenH * 0.3383) - 1, (screenW * 0.3425) - 1, (screenH * 0.3383) - 1, tocolor(0, 255, 239, 255), 1, false) dxDrawLine((screenW * 0.3425) - 1, screenH * 0.3900, screenW * 0.4875, screenH * 0.3900, tocolor(0, 255, 239, 255), 1, false) dxDrawLine(screenW * 0.4875, screenH * 0.3900, screenW * 0.4875, (screenH * 0.3383) - 1, tocolor(0, 255, 239, 255), 1, false) end end addEventHandler("onClientRender", root, registerInformations) --Este es el texto y rectangle que aparecerá por defecto al iniciar el script, con createNewInformation se borrará este texto y aparecerá el de mewss. function newsInformations() dxDrawRectangle(screenW * 0.4875, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517, tocolor(0, 0, 0, 180), false)--News Rectangle dxDrawText("News", screenW * 0.5162, screenH * 0.3383, screenW * 0.6050, screenH * 0.3850, tocolor(255, 255, 255, 255), 2.00, "default-bold", "left", "top", false, false, false, false, false) if isMouseInPosition(screenW * 0.4875, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517) then --News lines dxDrawLine((screenW * 0.4875) - 1, (screenH * 0.3383) - 1, (screenW * 0.4875) - 1, screenH * 0.3900, tocolor(0, 255, 239, 255), 1, false) dxDrawLine(screenW * 0.6325, (screenH * 0.3383) - 1, (screenW * 0.4875) - 1, (screenH * 0.3383) - 1, tocolor(0, 255, 239, 255), 1, false) dxDrawLine((screenW * 0.4875) - 1, screenH * 0.3900, screenW * 0.6325, screenH * 0.3900, tocolor(0, 255, 239, 255), 1, false) dxDrawLine(screenW * 0.6325, screenH * 0.3900, screenW * 0.6325, (screenH * 0.3383) - 1, tocolor(0, 255, 239, 255), 1, false) end end addEventHandler("onClientRender", root, newsInformations) --Este es el texto y rectangle que aparecerá por defecto al iniciar el script, con createNewCharacterInformation se borrará este texto y aparecerá el de newCharaterText. function characterInformations() dxDrawRectangle(screenW * 0.6325, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517, tocolor(0, 0, 0, 180), false)--Character Rectangle dxDrawText("Character", screenW * 0.6325, screenH * 0.3383, screenW * 0.7212, screenH * 0.3850, tocolor(255, 255, 255, 255), 1.90, "default-bold", "left", "top", false, false, false, false, false) if isMouseInPosition(screenW * 0.6325, screenH * 0.3383, screenW * 0.1450, screenH * 0.0517) then dxDrawLine((screenW * 0.6325) - 1, (screenH * 0.3383) - 1, (screenW * 0.6325) - 1, screenH * 0.3900, tocolor(0, 255, 239, 255), 1, false) dxDrawLine(screenW * 0.7775, (screenH * 0.3383) - 1, (screenW * 0.6325) - 1, (screenH * 0.3383) - 1, tocolor(0, 255, 239, 255), 1, false) dxDrawLine((screenW * 0.6325) - 1, screenH * 0.3900, screenW * 0.7775, screenH * 0.3900, tocolor(0, 255, 239, 255), 1, false) dxDrawLine(screenW * 0.7775, screenH * 0.3900, screenW * 0.7775, (screenH * 0.3383) - 1, tocolor(0, 255, 239, 255), 1, false) end end addEventHandler("onClientRender", root, characterInformations) --Este es el rectangle principal addEventHandler("onClientRender", root, function() dxDrawRectangle(screenW * 0.2125, screenH * 0.2833, screenW * 0.5650, screenH * 0.0550, tocolor(254, 253, 253, 255), false) end ) Pido ayuda con esto por que al precionar los rectangle's me tira errores: Bad usage @ 'addEventHandler' ['onClientRender' with this function is already handled] Y pues quisiera sabe como ya dije anteriormente, si hay una manera de hacer el código más corto y mejor Edited August 3, 2016 by Guest Link to comment
Tomas Posted August 2, 2016 Share Posted August 2, 2016 Con esta funcion arreglas lo del debug. local _addEventHandler = addEventHandler function addEventHandler(a, b, c, d, e) removeEventHandler(a, b, c) addEventHandler(a, b, c, d, e) end Aunque te recomiendo en un solo render cargar todo y utilizar variables en vez de eventos. Link to comment
Anzo Posted August 2, 2016 Author Share Posted August 2, 2016 Con esta funcion arreglas lo del debug. local _addEventHandler = addEventHandler function addEventHandler(a, b, c, d, e) removeEventHandler(a, b, c) addEventHandler(a, b, c, d, e) end Aunque te recomiendo en un solo render cargar todo y utilizar variables en vez de eventos. Edit: Gracias Tomas. Link to comment
Recommended Posts