Jump to content

dxDrawText túlnyúlás


Recommended Posts

Posted

Helló nekem az lenne a problémám hogy egy dxDrawTextet létrehozok és úgymond a keretén kívülre nyúlik a szöveg, aminek nem igazán kéne megtörténnie van erre valami megoldás?

 

Előre is köszi a segítséget!

Posted

Szinezem is és ha szinezed akkor a clipet és a wordBreakot egyből false-ra állítja most milegyen?

Note: clip and wordBreak are forced false if this is set.

Posted

A sortörést megoldottam, de ha a colorCoded argumentum True akkor a clip és a wordBreak argumentum instant false tehát a clipet nem tudom engedélyezni, mert szükségem van a szinezésre

Posted
Just now, TyFun said:

A sortörést megoldottam, de ha a colorCoded argumentum True akkor a clip és a wordBreak argumentum instant false tehát a clipet nem tudom engedélyezni, mert szükségem van a szinezésre

Arra ís írtam megoldást.

Posted (edited)

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
Posted

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?

Posted

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.

Posted (edited)

...

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
Posted

@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
)

 

Posted

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?

  • 2 months later...
  • Discord Moderators
Posted

Én a helyedben nem hoznék létre rendertargetot onClientRender-ben.
Nem egészséges a VRAM szempontjából.

Posted

@Pirulax Őőő valóban igazad van. De akkor mit javasolsz mit használjak?
Van még egy olyan probléma is hogy ha több mint 26 ékezetes betűt írok be akkor nem írja ki csak az első 26-ot ez a rendertarget vagy a dxtext hibája, ezt hogyan lehetne kiküszöbölni?

  • Discord Moderators
Posted (edited)

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

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...