Jump to content

dxDrawText túlnyúlás


Recommended Posts

Hogyan kell használni a dxSetRenderTarget-et? tehát van ez a kód:

addEventHandler("onClientRender", root,
    function()
        dxtext = dxDrawText(text, 20, 200, 480, 400, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "bottom", true, false, false, true, true)
    end
)

Ide hogyan kell beírni azt hogy a kereten kívül ne írjon semmit?

 

Edited by TyFun
Link to comment

Jó létrehozom a dxTargetet és a dxSetRender Target de ezek után nem akarja kiírni a dxText-et amit kiakarok iratni

render = dxCreateRenderTarget(500, 600)

addEventHandler("onClientRender", root,
    function()
    	dxSetRenderTarget(render)
        dxDrawText(ooctext, 20, 200, 480, 400, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "bottom", false, false, false, true, false)
    	dxSetRenderTarget()
    end
)

Tehát ez nem jeleníti meg a dxDrawText-et... miért nem?

Link to comment

Ennek a rendertargetnek nincs értelme. A rendertarget nem képes magától megtörni a sort, csak levágja a kilógó részt. Egy egyszerű módszer arra, ha több colorcodeot használsz egy szövegben, akkor számolod a szöveg hosszát, és ha az nagyobb mint a kívánt hossz, beleillesztesz egy sortörést (\n). Ha nincs több colorcodeod, akkor nem muszáj HEX codeot használni benne, egyszerűen a tocolorban átírod a kívánt színt, és a "colored" argument már falsera állítható, így a clip már nem lesz automatikusan false.

Link to comment

...

On 2018. 03. 26. at 12:00, NeXuS™ said:

Ennek a rendertargetnek nincs értelme. A rendertarget nem képes magától megtörni a sort, csak levágja a kilógó részt. Egy egyszerű módszer arra, ha több colorcodeot használsz egy szövegben, akkor számolod a szöveg hosszát, és ha az nagyobb mint a kívánt hossz, beleillesztesz egy sortörést (\n). Ha nincs több colorcodeod, akkor nem muszáj HEX codeot használni benne, egyszerűen a tocolorban átírod a kívánt színt, és a "colored" argument már falsera állítható, így a clip már nem lesz automatikusan false.

A sortörés meg van oldva nekem az a problémám hogy a dxText túl megy a megadott nagyságon, pl ha beírsz 500 sort akkor megjelenik 500 sor nekem ezt kéne megoldani hogy ne írjon ki 500 sort csak mondjuk 5-t

Edited by TyFun
Link to comment

@WorthlessCynomys Na igen de nekem nem akar megjelenni a dxText és nem értem hogy miért... Tehát ez a kód nem működik hibát nam ad vissza szóval nem értem...

target = dxCreateRenderTarget(20, 200)

addEventHandler("onClientPreRender", root,
    function()
    	dxSetRenderTarget(target)
        dxDrawText(ooctext, 20, 200, 480, 400, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "bottom", false, false, false, true, false)
    	dxSetRenderTarget()
    end
)

 

Link to comment

Na megértettem a rendertarget működését.

2 problémám van:

Ha létrehozom a szöveget és változtatom akkor amit a változtatás előtt írtam bele az ott marad, de amit meg akkor írok oda az ott marad: 

render = dxCreateRenderTarget(400, 300, true)

addEventHandler("onClientRestore", root, 
	function()
		render = dxCreateRenderTarget(400,300, true)
	end
)

addEventHandler("onClientPreRender", root,
    function()
		if render then
	    	dxSetRenderTarget(render)
	        dxDrawText(ooctext, 0, 0, 300, 200, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "bottom", false, false, false, true, false)
	    	dxSetRenderTarget()
      
	    	dxDrawImage(20, 200, 400, 300, render)
    	end
    end
)

Ha pedig ezt így csinálom akkor nem marad ott az előző viszont egy időután bebuggol a rendertarget és random eltűnik:

render = dxCreateRenderTarget(400, 300, true)

addEventHandler("onClientRestore", root, 
	function()
		render = dxCreateRenderTarget(400,300, true)
	end
)

addEventHandler("onClientPreRender", root,
    function()
		render = dxCreateRenderTarget(400, 300, true)
		if render then
	    	dxSetRenderTarget(render)
	        dxDrawText(ooctext, 0, 0, 300, 200, tocolor(255, 255, 255, 255), 1.00, "default-bold", "left", "bottom", false, false, false, true, false)
	    	dxSetRenderTarget()

	    	dxDrawImage(20, 200, 400, 300, render)
    	end
    end
)

Na most akkor el tudjátok mondani mi itt a probléma, úgy hogy működjön?

Link to comment
  • 2 months later...
  • Discord Moderators

Ahogy eddig csináltad, létrehozod script elején, aztán használod a 

dxSetRenderTarget()

És a 2. argumentumot 'true'-ra állitod, ezzel kitisztisa a rtargetot mielőtt újra rajzolsz rá, azért mert a rtarget egy papirlap(igy biztos megérted.), ezáltál ha 1x rajzolsz rá, az ott is marad.
Egyébként, rosszul használod a rtargetot, igy csak zabálja a CPU-t, csak akkor frissitsd a rtargetot ha új szöveget akarsz irni, a többi szöveget meg tárolod egy táblában, igy amikor érkezik egy új szöveg akkor csak végigloopsz rajta, és kirajzolod azt amit kell.(Legyen egy sor limit, mondjuk 10.)
Igy valahogy csináld meg(ne render alatt):

dxSetRenderTarget(rtarget, true)
dxSetBlendMode("modulate_add")

local subY = dxGetFontHeight(1, "default-bold")
local offsetY = 500--//Ird ide a rtarget magasságát
for i = #texts, 1, -1 do
  	dxDrawText(texts[i], ird be, offsetY-subY*(i-), ...)--// A ...-ot helyettesitsd be azzal amivel kell.
end

dxSetBlendMode("add")
dxSetRenderTarget()

Ez csak példa, eléggé fáradt vagyok, és nincs kedvem sokat babráli a cuccokkal, bocsi.

A

dxSetBlendMode

Csak azért kell,hogy a szöveg szebb legyen.

Második problémát nem értem teljesen, az valószitűleg a sajátkészitésű worldbreak miatt van, mivel a magyar betűket nem tudja kezelni a lua(nem ascii betűket), erre ott az utf8 lib MTAban.
(Feltéve, ha az a baj,hogy levágja a szöveget)

 

U.I.:

onClientRender

-be tedd a kép felrajzolását.

Edited by Pirulax
  • Like 1
Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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