Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2017-06-07, 16:48


Dorex

Rick






Wiek: 28
Na forum: 4856 dni
Posty: 108

Piwa: 2471

Respekt: 296,3
Respekt: 296,3Respekt: 296,3Respekt: 296,3

Funkcja podzielona (Serwer i Klient)

Sk?adnia:

float float float interpolateBetween float x1float y1float z1float x2float y2float z2float fProgressstring strEasingType, [ float fEasingPeriodfloat fEasingAmplitudefloat fEasingOvershoot ] )


InterpolateBetween - jest to interpolacja wektora 3D, kt?ry wylicza pomi?dzy warto?ci? pocz?tkow? a docelow?, mo?na by? r?wnie? stosowana do interopolacji 2D, operuje si? na niej przy pomocy parametr?w x,y,z.

Wymagane argumenty:
- x1, y1, z1 - wsp??rz?dne pocz?tkowe wektora 3D lub warto?ci
- x2, y2, z2 - wsp??rz?dne docelowe wektora 3D lub warto?ci
- fProgress - warto?? zmiennoprzecinkowa pomi?dzy 0 a 1, kt?ra to okre?la post?p interpolacji (0 warto?? pocz?tkowa, 1 warto?? docelowa)
- strEasingType - okre?lenie z?agodzenia dla interpolacji (t?umacz?c oznacza to wyb?r profilu funkcji dla naszej interpolacji)

Profile funkcji:
https://wiki.multitheftauto.com/wiki/Easing


Opcjonalne argumenty:
- fEasingPeriod - Okre?la zmian? dynamiki funkcji (tylko niekt?re funkcje mog? przyjmowa? ten argument) (domy?lnie przyjmuje warto?? 0,3)
- fEasingAmplitude - Okre?la amplitud? dla profilu funkcji (domy?lnie przyjmuje warto?? 1,0)
- fEasingOvershoot - Okre?la regulacje podczas zmiany dynamiki (domy?lnie przyjmuje warto?? 1,701)


Zwroty:
Zwraca interpolacje 3D wektora x, y, z, w przypadku b??du argumentu przyjmuje warto?? false.

Przyk?ad:
Przyk?ad wykorzystuje r??nice mi?dzy getTickCount oraz pozwala ustali? czas zako?czenia interpolacji, okres dla profilu funkcji, amplitud?, regulacje podczas zmiany dynamiki

Strona Klienta:


local sWsH guiGetScreenSize(  )
Used false
EasingType = { "Linear""InQuad""OutQuad""InOutQuad""OutInQuad""InElastic""OutElastic""InOutElastic""OutInElastic""InBack""OutBack""InOutBack""OutInBack""InBounce""OutBounce""InOutBounce""OutInBounce""SineCurve""CosineCurve" }

function onClientRenderInterpolate()
    local czas_uplyniety getTickCount(  ) - czas_poczatkowy
    local czas_trwania czas_koncowy czas_poczatkowy
    local postep czas_uplyniety/czas_trwania
    local xyinterpolateBetween (start_Xstart_Ystart_Zend_Xend_Yend_Zpostepprofil_funkcjiokres_funkcjiamplituda_funkcjiregulacja_funkcji)
    local tekst profil_funkcji.." ".. tonumber(postep*100) .."% ["..okres_funkcji..", "..amplituda_funkcji..", "..regulacja_funkcji.."]"
    setElementPositionG_markerxy)
    if postep >= 1 then
        Used false
        if isElementG_marker then destroyElementG_marker end
        outputChatBox(tekst)
        removeEventHandler"onClientRender"getRootElement(), onClientRenderInterpolate)
    end
    local width dxGetTextWidthtekst2"default-bold" )
    local height dxGetFontHeight2"default-bold" )
    dxDrawText(tekstsW/2-width/2sH/2-height/2widthheighttocolor(255,255,255,255), 2"default-bold"  )
end



function Interpolacja(CMDprofilczasokresamplitudaregulacja)
    if not profil then
        outputChatBox("Sk?adania /"..CMD.." nazwa profilu funkcji [czas trwania, okres, amplituda, regulacja]"17500)
        return
    end
    if Used then
        outputChatBox("Interpolacja jest w?a?nie wykonywana prosz? poczeka?",17500)
        return
    end
    for i,v in ipairs(EasingType) do
        outputConsole(v)
        if == profil then
            czas_poczatkowy getTickCount(  )
            czas_koncowy getTickCount(  )+(tonumber(czas) ~= nil and tonumber(czas) or 2500)
            profil_funkcji tostring(v)
            okres_funkcji = (tonumber(okres) ~= nil and tonumber(okres) or 0.3)
            amplituda_funkcji = (tonumber(amplituda) ~= nil and tonumber(amplituda) or 1.0)
            regulacja_funkcji = (tonumber(regulacja) ~= nil and tonumber(regulacja) or 1.701)
            Used true
            local xygetElementPositionlocalPlayer )
            local __rz getElementRotationlocalPlayer"default"true )
            local rz math.rad360-rz )
            local x 1.0 math.sin(rz)
            local y 1.0 math.cos(rz)
            local z z+2
            start_Xstart_Ystart_Z xyz
            end_Xend_Yend_Z xyz-3
            G_marker createMarker(xyz"cylinder"1.025500155)
            addEventHandler"onClientRender"getRootElement(), onClientRenderInterpolate)
            return
        end
    end
    outputChatBox("Nie znaleziono profilu funkcji o nazwie "..tostring(profil), 17500)
end
addCommandHandler"interpolacja"Interpolacja )


Pokaz wideo:

PEŁNY EKRAN Odnośnik YouTube



Podpis
Nie bądź 🐷 postaw piwo.
Postaw piwo autorowi tego posta
 

 
Wysłany: 2017-06-07, 18:44


Jurandovsky

Kurdebele






Wiek: 17
Na forum: 4838 dni
Posty: 915

Piwa: 2697

Respekt: 955,3
Respekt: 955,3Respekt: 955,3

Brawo Dorian!! Mo?e tego nie wida?, ale przed ekranem bij? Ci brawo stopami, tak ?wietnie opisana FUNKCJA ZMIENIAJ?CA POZYCJE OBIEKTU IKS DE DE DE

good job bro

Podpis
Jedyny kontakt ze mną to PW forum

Kod:


local noobs = getElementsByTitle("player", "Programista LUA")
for k, v in ipairs(noobs) do
outputChatBox("Bez mózgu jest użytkownik o nicku: "..getPlayerName(v), root)
destroyElement(v)
end
Postaw piwo autorowi tego posta
 

 
Tagi: [poradnik] :: interpolatebetween
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » Poradniki do LUA Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku