Anuncios Google

Problema con screen.textwidth (LuaDEV)

Hola a tod@s.

Estoy intentando hacer una terminal, por lo que hice una función para que me mostrara  un texto y me lo dividiera cuando llegara al máximo de la pantalla. El problema es que no lo hace, por lo que hice una copia con depuración:

-- debugAjust()
function debugAdjust()
	local str = "> This is a too large text to prove if it divides when size text will be more larger than width screen."
	local tmpch
	local width = 0
	local file = io.open("stout", "w+")
	table.insert(tprint, "")
 
	for tmpch in str:gmatch(".") do
		local line = #tprint
		if tmpch == "\n" then table.insert(tprint, ""); width = 0;
		elseif width+screen.textwidth(tmpch, 0.5) >= 480 then table.insert(tprint, tmpch); width = screen.textwidth(tmpch, 0.5);
		else tprint[line] = tprint[line]..tmpch; width = width+screen.textwidth(tmpch, 0.5) end
		file:write("char: "..tmpch..", width: "..screen.textwidth(tmpch, 0.5)..", max: "..width..", "..tostring(width+screen.textwidth(tmpch, 0.5) >= 480).."\n")
	end
	file:flush()
	file:close()
	file = nil
end

Y me arroja esto:

char: >, width: 5, max: 5, false
char:  , width: 3, max: 8, false
char: T, width: 7, max: 15, false
char: h, width: 6, max: 21, false
char: i, width: 2, max: 23, false
char: s, width: 5, max: 28, false
char:  , width: 3, max: 31, false
char: i, width: 2, max: 33, false
char: s, width: 5, max: 38, false
char:  , width: 3, max: 41, false
char: a, width: 6, max: 47, false
char:  , width: 3, max: 50, false
char: t, width: 4, max: 54, false
char: o, width: 6, max: 60, false
char: o, width: 6, max: 66, false
char:  , width: 3, max: 69, false
char: l, width: 2, max: 71, false
char: a, width: 6, max: 77, false
char: r, width: 4, max: 81, false
char: g, width: 6, max: 87, false
char: e, width: 6, max: 93, false
char:  , width: 3, max: 96, false
char: t, width: 4, max: 100, false
char: e, width: 6, max: 106, false
char: x, width: 5, max: 111, false
char: t, width: 4, max: 115, false
char:  , width: 3, max: 118, false
char: t, width: 4, max: 122, false
char: o, width: 6, max: 128, false
char:  , width: 3, max: 131, false
char: p, width: 6, max: 137, false
char: r, width: 4, max: 141, false
char: o, width: 6, max: 147, false
char: v, width: 5, max: 152, false
char: e, width: 6, max: 158, false
char:  , width: 3, max: 161, false
char: i, width: 2, max: 163, false
char: f, width: 4, max: 167, false
char:  , width: 3, max: 170, false
char: i, width: 2, max: 172, false
char: t, width: 4, max: 176, false
char:  , width: 3, max: 179, false
char: d, width: 6, max: 185, false
char: i, width: 2, max: 187, false
char: v, width: 5, max: 192, false
char: i, width: 2, max: 194, false
char: d, width: 6, max: 200, false
char: e, width: 6, max: 206, false
char: s, width: 5, max: 211, false
char:  , width: 3, max: 214, false
char: w, width: 8, max: 222, false
char: h, width: 6, max: 228, false
char: e, width: 6, max: 234, false
char: n, width: 6, max: 240, false
char:  , width: 3, max: 243, false
char: s, width: 5, max: 248, false
char: i, width: 2, max: 250, false
char: z, width: 5, max: 255, false
char: e, width: 6, max: 261, false
char:  , width: 3, max: 264, false
char: t, width: 4, max: 268, false
char: e, width: 6, max: 274, false
char: x, width: 5, max: 279, false
char: t, width: 4, max: 283, false
char:  , width: 3, max: 286, false
char: w, width: 8, max: 294, false
char: i, width: 2, max: 296, false
char: l, width: 2, max: 298, false
char: l, width: 2, max: 300, false
char:  , width: 3, max: 303, false
char: b, width: 6, max: 309, false
char: e, width: 6, max: 315, false
char:  , width: 3, max: 318, false
char: m, width: 8, max: 326, false
char: o, width: 6, max: 332, false
char: r, width: 4, max: 336, false
char: e, width: 6, max: 342, false
char:  , width: 3, max: 345, false
char: l, width: 2, max: 347, false
char: a, width: 6, max: 353, false
char: r, width: 4, max: 357, false
char: g, width: 6, max: 363, false
char: e, width: 6, max: 369, false
char: r, width: 4, max: 373, false
char:  , width: 3, max: 376, false
char: t, width: 4, max: 380, false
char: h, width: 6, max: 386, false
char: a, width: 6, max: 392, false
char: n, width: 6, max: 398, false
char:  , width: 3, max: 401, false
char: w, width: 8, max: 409, false
char: i, width: 2, max: 411, false
char: d, width: 6, max: 417, false
char: t, width: 4, max: 421, false
char: h, width: 6, max: 427, false
char:  , width: 3, max: 430, false
char: s, width: 5, max: 435, false
char: c, width: 6, max: 441, false
char: r, width: 4, max: 445, false
char: e, width: 6, max: 451, false
char: e, width: 6, max: 457, false
char: n, width: 6, max: 463, false
char: ., width: 2, max: 465, false

Y si pongo el script total dice que ocupa 496 píxeles.

¿Cual es el problema? ¿En donde fallo?


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de NEKERAFA

Corregido chapuceramente

Despues de probar por palabras (También ocasionaba el mismo error), lo he corregido tanteando, y aproximadamente entran a 456px de ancho.


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Raro, con palabras me va bien

Raro, con palabras me va bien a mí (siempre y cuando el tamaño sea >= 0.6).

Imagen de NEKERAFA

Ahh

Yo sólo lo probé con 0.5

Cuando usas width =

Cuando usas width = screen.textwidth(tmpch, 0.5) no debería ser width = width+screen.textwidth(tmpch, 0.5)?

EDITO: Olvídalo, creo acabas de encontrar un bug en LuaDEV. Al parecer con tamaños de 0.5 (o menores me imagino) no furula como debería textwidth (pruébalo con 0.6, casi seguro te irá).

Imagen de zerozelta

pues yo uso el

pues yo uso el screen.textwidth() a tamaño 0.5 y me funciona perfectamente (pero solo con la fuente original, no he probado con fuentes personalizadas)

asi que no tengo idea de porque le falle a nekerafa


Yo hice una pequeña función

Yo hice una pequeña función que acomoda el texto al ancho que le digas (no me basta con el print de LuaDEV), y no me va con 0.5 y la fuente original. Con 0.6 o mayor va bien... a saber xD

Imagen de NEKERAFA

Mmm...

Pues ni 0.5 ni 0.6, que lo acabo de probar... Pues entonces screen.textwidth se bugea al tener un carácter

Sep, eso parece. Que

Sep, eso parece. Que realmente no sé por qué analizas caracter por caracter cuando podrías hacerlo palabra por palabra (más rápido, y funciona mejor).

Imagen de NEKERAFA

Mmm...

Pues simplemente porque quiero que el texto ocupe toda la pantalla, tipo terminal, pero como bien dices tendré que hacerlo por palabras. ¡Qué asco! >.<


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Mmm...

Yo para calcular el tamaño del texto y hacer un print centrado uso esto, ojo, es para NDS (Muy facilito de portar), dado a que no existe la función screen.textwidth

function screen.centerprint(screen,y,t,c)
 
    screen = screen or SCREEN_UP
    y = y or 6
    t = t or ""
    c = c or Color.new256(255,255,255)
 
     screen.print(screen,math.floor(math.max(0,128-(#t*3))),c)
 
end

Salu2! §

Imagen de NEKERAFA

Hay un problema

El problema es que la fuente de la PSP no es monoespaciada, por lo que todos los caracteres tienen diferente ancho.

Ups

No conté con eso...

 

PD: Acabo de encontar el code de una terminal que había hecho hace mucho tiempo para NDS, aunque es posible que tenga algún que otro error.

Terminal = {}
Terminal.Items = {}
 
function Terminal.Add(text)
	if #Terminal.Items >= 25 then table.remove(Terminal.Items,1) end
	if #text < 32 then
		table.insert(Terminal.Items,text)
	else
		for i=1,#text,32 do
			table.insert(Terminal.Items,string.sub(text,i,i+32))
		end
	end
	return #Terminal.Items
end
 
function Terminal.Del(id)
	table.remove(Terminal.Items,id)
end
 
function Terminal.Clear()
	Terminal.Items = nil
	Terminal.Items = {}
end
 
function Terminal.Show()
	local _TermLenght = #Terminal.Items
 
	for i=1,_TermLenght do
		screen.print(SCREEN_UP,2,14*i,Terminal.Items[i])
	end
end

Espero que te sea util!

Imagen de NEKERAFA

Gracias, pero no es lo que busco

Lo estás analizando como número de caracteres, y yo necesito ancho en píxeles. Tendré que esperar a que lo arreglen...

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.