love.errhand (Polski)

Przedawnione w LÖVE 11.0
Ta funkcja została przedawniona i zastąpiona przez love.errorhandler. Będzie usunięta w przyszłych wersjach LÖVE


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

Dostępne od wersji LÖVE 0.10.0
Ten wariant nie jest dostępny we wcześniejszych wersjach.

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 nie istnieje okno love lub niezbę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.isOpen() then
		local success, status = pcall(love.window.setMode, 800, 600)
		if not success or not status then
			return
		end
	end
 
	-- Przywrócenie domyślnych ustawień urządzeń
	if love.mouse then
		love.mouse.setVisible(true)
		love.mouse.setGrabbed(false)
		love.mouse.setRelativeMode(false)
	end
	if love.joystick then
		-- Stop all joystick vibrations.
		for i,v in ipairs(love.joystick.getJoysticks()) do
			v:setVibration()
		end
	end
	if love.audio then love.audio.stop() end
	love.graphics.reset()
	local font = love.graphics.setNewFont(math.floor(love.window.toPixels(14)))
 
	love.graphics.setBackgroundColor(89, 157, 220)
	love.graphics.setColor(255, 255, 255, 255)
 
	local trace = debug.traceback()
 
	love.graphics.clear(love.graphics.getBackgroundColor())
	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()
		local pos = love.window.toPixels(70)
		love.graphics.clear(love.graphics.getBackgroundColor())
		love.graphics.printf(p, pos, pos, love.graphics.getWidth() - pos)
		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
			elseif e == "keypressed" and a == "escape" then
				return
			elseif e == "touchpressed" then
				local name = love.window.getTitle()
				if #name == 0 or name == "Untitled" then name = "Game" end
				local buttons = {"OK", "Cancel"}
				local pressed = love.window.showMessageBox("Quit "..name.."?", "", buttons)
				if pressed == 1 then
					return
				end
			end
		end
 
		draw()
 
		if love.timer then
			love.timer.sleep(0.1)
		end
	end
 
end
Dostępne od wersji LÖVE 0.9.0, usunięte w wersji LÖVE 0.9.2
Ten wariant nie jest dostępny we wcześniejszych lub późniejszych wersjach.

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 nie istnieje okno love lub niezbę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

Usunięte w wersji 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