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

Personal tools