love.errhand (Polski)

Procedura obsługi wyjątków, używana do wyświetlania błędów.

Funkcja

Sygnatura

love.errhand( wiadomosc )

Argumenty

string wiadomosc
Wiadomość z komunikatem błędu.

Wartość zwracana

Żadna

Przykłady

Available since LÖVE 0.9.0
This variant is not supported in earlier versions.

Domyślna implementacja

-- wypisywanie błędu na konsoli
local function error_printer(wiadomosc, layer)
	print((debug.traceback("Error: " .. tostring(wiadomosc), 1+(layer or 1)):gsub("\n[^\n]+$", "")))
end

function love.errhand(wiadomosc)
	wiadomosc = tostring(wiadomosc)

	error_printer(wiadomosc, 2)

	-- jeśli okno love nie istnieje, lub nizbędne moduły
	-- nie jesteśmy w stanie nic więcej zrobić
	if not love.window or not love.graphics or not love.event then
		return
	end

	if not love.graphics.isCreated() or not love.window.isCreated() then
		if not pcall(love.window.setMode, 800, 600) then
			return
		end
	end

	-- Przywrócenie domyślnych ustawień urządzeń
	if love.mouse then
		love.mouse.setVisible(true)
		love.mouse.setGrabbed(false)
	end
	if love.joystick then
		for i,v in ipairs(love.joystick.getJoysticks()) do
			v:setVibration() -- Przerwij wibracje wszystkich joysticków
		end
	end
	if love.audio then love.audio.stop() end
	love.graphics.reset()
	love.graphics.setBackgroundColor(89, 157, 220)
	local font = love.graphics.setNewFont(14)

	love.graphics.setColor(255, 255, 255, 255)

	local trace = debug.traceback()

	love.graphics.clear()
	love.graphics.origin()

	local err = {}

	table.insert(err, "Error\n")
	table.insert(err, wiadomosc.."\n\n")

	for l in string.gmatch(trace, "(.-)\n") do
		if not string.match(l, "boot.lua") then
			l = string.gsub(l, "stack traceback:", "Traceback\n")
			table.insert(err, l)
		end
	end

	local p = table.concat(err, "\n")

	p = string.gsub(p, "\t", "")
	p = string.gsub(p, "%[string \"(.-)\"%]", "%1")

	local function draw()
		love.graphics.clear()
		love.graphics.printf(p, 70, 70, love.graphics.getWidth() - 70)
		love.graphics.present()
	end

	while true do
		love.event.pump()

		for e, a, b, c in love.event.poll() do
			if e == "quit" then
				return
			end
			if e == "keypressed" and a == "escape" then
				return
			end
		end

		draw()

		if love.timer then
			love.timer.sleep(0.1)
		end
	end

end

Removed in LÖVE 0.9.0
Ta wersja jest używana we wcześniejszych wersjach LOVE..

Domyślna implementacja

-- wypisywanie błędu na konsoli
local function error_printer(wiadomosc, layer)
	print((debug.traceback("Error: " .. tostring(wiadomosc), 1+(layer or 1)):gsub("\n[^\n]+$", "")))
end

function love.errhand(wiadomosc)
	wiadomosc = tostring(wiadomosc)

	error_printer(wiadomosc, 2)

	if not love.graphics or not love.event or not love.graphics.isCreated() then
		return
	end

	-- Przywrócenie domyślnych ustawień urządzeń
	if love.audio then love.audio.stop() end
	love.graphics.reset()

	love.graphics.setBackgroundColor(89, 157, 220)
	local font = love.graphics.newFont(14)
	love.graphics.setFont(font)

	love.graphics.setColor(255, 255, 255, 255)

	local trace = debug.traceback()

	love.graphics.clear()

	local err = {}

	table.insert(err, "Error\n")
	table.insert(err, wiadomosc.."\n\n")

	for l in string.gmatch(trace, "(.-)\n") do
		if not string.match(l, "boot.lua") then
			l = string.gsub(l, "stack traceback:", "Traceback\n")
			table.insert(err, l)
		end
	end

	local p = table.concat(err, "\n")

	p = string.gsub(p, "\t", "")
	p = string.gsub(p, "%[string \"(.-)\"%]", "%1")

	local function draw()
		love.graphics.clear()
		love.graphics.printf(p, 70, 70, love.graphics.getWidth() - 70)
		love.graphics.present()
	end

	draw()

	local e, a, b, c
	while true do
		e, a, b, c = love.event.wait()

		if e == "quit" then
			return
		end
		if e == "keypressed" and a == "escape" then
			return
		end

		draw()

	end

end

Zobacz również


Inne języki