Do południa bawiłem się trochę stylowaniem, bo wybrana themka, trochę już przeze mnie wymemłana, oczywiście średnio sobie radziła ze wstawkami kodu. Ponadto – najwyższy czas zapoczątkować nową, warsztatową kategorię, pod którą będę mógł składować moją radosną twórczość ;]

A zatem otwieram „Imadło”, nazwa taka sobie i byle jaka – myślę, że w sam raz :P
Na pierwszy ogień pójdzie kompletny banał – byle wstawić kawałek kodu i zobaczyć czy się świeci bardziej niż choinka ;D

Drobny wstępniak.

CoronaSDK ma generalnie taki problem, że nie lubi się z procesorami w architekturze ARM6. Z tego też powodu porzucili support dla Androida 2.1 i starszych. Oczywiście Android w wersji 2.2 i wyżej nie pomoże, jeżeli w urządzeniu nie siedzi przynajmniej ARM7. Jeżeli więc ktoś się uprze (a ja się uparłem), to musi pracować na jednym z antycznych buildów SDK.

Ja dokopałem się do buildu 2011.337, przetestowałem go i daje radę coś tam zbudować nawet dla mojej Xperii X8. Zasadnicze utrudnienie życia w tym przypadku polega na tym, że wszystkie pliki źródeł i zasobów muszą znajdować się w głównym katalogu projektu. Tak jest, żadnych podkatalogów = totalny pierdolnik. O tym jednak innym razem. Oczywistą oczywistością w przypadku tak starego buildu jest fakt, że tracimy dostęp do tych wszystkich cudnych ficzerów, które pojawiły się w SDK od tamtego czasu. Corona jest wówczas goła i wesoła, a okazuje się nawet, że nie ma czegoś tak błahego jak funkcja math.round(), która po prostu nie jest oficjalną składową języka Lua :)

Ok, no to jedziemy z własną odmianą math.round(), na wypadek gdyby brakowało jej w naszym środowisku:

    if math.round == nil then

        math.round = function( number )

            local number = tonumber( number ) or 0
            return math.floor(number + 0.5)
        end
    end

W sumie to zaokrąglanie nadal jest skromne, bo przydałby się parametr dla precyzji zaokrąglenia. Corona do tej pory nie dorobiła się odpowiedniego rozwiązania, dlatego na użytek własny powołam do życia funkcję math.roundTo():

    math.roundTo = function( number, precision )

        local number = tonumber( number ) or 0
        local precision = tonumber( precision ) or 0
        precision = math.pow( 10, math.round( precision ) )

        return math.round( number / precision ) * precision
    end

No dobra. Dla formalności jakiś przykład dla potomnych ;P

    local number1   = 17.1337
    
    print( math.round( number1 ) )
        -- wypisze: 17
        
    print( math.roundTo( number1 ) )
        -- precyzja jest opcjonalna, domyślnie 0; wypisze: 17
        
    print( math.roundTo( number1, 0 ) )
        -- domyślna precyzja 0 oznacza rząd jedności; wypisze: 17
        
    print( math.roundTo( number1, -2 ) )
        -- zaokrąglenie do dwóch miejsc po przecinku; wypisze: 17.13
        
    print( math.roundTo( number1, -3 ) )
        -- zaokrąglenie do trzech miejsc po przecinku; wypisze: 17.134

    print( math.roundTo( number1, 1 ) )
        -- zaokrąglenie do całych dziesiątek; wypisze: 20

    local number2   = -0.509
    
    print( math.round( number2 ) )
        -- wypisze: -1
        
    print( math.roundTo( number2 ) )
        -- wypisze: -1
        
    print( math.roundTo( number2, 0 ) )
        -- wypisze: -1
        
    print( math.roundTo( number2, -2 ) )
        -- wypisze: -0.51
        
    print( math.roundTo( number2, -3 ) )
        -- wypisze: -0.509

    print( math.roundTo( number2, 1 ) )
        -- wypisze: 0

 

Na koniec kompletny listing pliku, zwarty i gotowy do użycia w walce ;]

--[[-----------------------------------

CoronaSDK / Lua Extensions
ext_math_round.lua
2013, Hubert Świtek
Released under NO license - use it as you like, if you like it ;]

Desired to be compatible with CoronaSDK builds as far as 2011.377;
Aimed to be deployed on ARM6-based Android devices;

-----------------------------------]]--


    -- math.round --
    
    if math.round == nil then

        math.round = function( number )

            local number = tonumber( number ) or 0
            return math.floor(number + 0.5)
        end
    end

    
    -- math.roundTo --  
    
    math.roundTo = function( number, precision )

        local number = tonumber( number ) or 0
        local precision = tonumber( precision ) or 0
        precision = math.pow( 10, math.round( precision ) )

        return math.round( number / precision ) * precision
    end

No dobra, dość zabawy na dzisiaj. Na jakiś czas powinno mi wystarczyć takie ostylowanie. Choinka przy tym to pikuś :D

« »