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

Wysłany: 2018-02-10, 21:19


eject

kurdebele






Wiek: 30
Na forum: 3659 dni
Posty: 182
Nick w MP: EjecT

Piwa: 2456

Respekt: 85,8

Ostrzeżeń: 60%
Witam, otrzymalem nast?puj?cy kod od marcina:
function isScreenElementInPosition(x1y1w1h1x2y2w2h2)
    return x1 x2+w2 and x2 x1+w1 and y1 y2+h2 and y2 y1+h1
end

Niby dzia?a ale nie o to mi chodzilo.

zwraca true nawet je?li po?owa kwadratu jest w koszyku, a druga po?owa na zewn?trz.


Na tym to polega

Prosze o pomoc.

Pozdrawiam

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-02-10, 22:25


RJ45







Wiek: 29
Na forum: 3274 dni
Posty: 14
Nick w MP: RJ45

Piwa: 84

Respekt: 280
Respekt: 280Respekt: 280Respekt: 280

Funkcja kt?r? masz zwraca TRUE gdy chocia? jeden wierzcho?ek znajduje si? w "koszyku".

Narysuj sobie na kartce koszyk i kwadrat i pisz obok warunek jaki musi spe?ni? ka?dy wierzcho?ek ?eby by?o tak jak chcesz. Tak to najpro?ciej zrozumie?.

Jak chcesz aby funkcja zwraca?a TRUE tylko gdy ca?y element jest w kwadracie to warunek powinien wygl?da? mniej wi?cej tak:

function isScreenElementInPosition(x1y1w1h1x2y2w2h2)
    return x2 x1 and
        x2 w2 x1 w1 and
        y2 y1 and
        y2 h2 y1 h1;
end


Tutaj masz skrypt do przetestowania, ?e to faktycznie dzia?a:

function isScreenElementInPosition(x1y1w1h1x2y2w2h2)
    return x2 x1 and
        x2 w2 x1 w1 and
        y2 y1 and
        y2 h2 y1 h1;
end

local koszyk = {
    200,
    200,
    150,
    150
};
local kwadrat = {
    100,
    100,
    100,
    100
};

addEventHandler('onClientRender'root, function (delta)
    local progress math.sin(getTickCount()/3000);
    local newXnewYinterpolateBetween(20020004004000progress'Linear');

    kwadrat.newX;
    kwadrat.newY;

    local kwadratColor 0xFFFF0000;
    if isScreenElementInPosition(koszyk.xkoszyk.ykoszyk.wkoszyk.hkwadrat.xkwadrat.ykwadrat.wkwadrat.hthen
        kwadratColor 0xFF00FF00;
    end
    
    --draw koszyk
    dxDrawLine(koszyk.xkoszyk.ykoszyk.koszyk.wkoszyk.y0xFF0000001true);
    dxDrawLine(koszyk.xkoszyk.ykoszyk.xkoszyk.koszyk.h0xFF0000001true);
    dxDrawLine(koszyk.koszyk.wkoszyk.ykoszyk.koszyk.wkoszyk.koszyk.h0xFF0000001true);
    dxDrawLine(koszyk.xkoszyk.koszyk.hkoszyk.koszyk.wkoszyk.koszyk.h0xFF0000001true);
    
    --draw kwadrat
    dxDrawRectangle(kwadrat.xkwadrat.ykwadrat.wkwadrat.hkwadratColorfalse);
end);   


Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 2 piw(a):
eject, marcin778
Wysłany: 2018-02-10, 22:28


eject

kurdebele






Wiek: 30
Na forum: 3659 dni
Posty: 182
Nick w MP: EjecT

Piwa: 2456

Respekt: 85,8

Ostrzeżeń: 60%
"RJ45" napisał/a:

Funkcja kt?r? masz zwraca TRUE gdy chocia? jeden wierzcho?ek znajduje si? w "koszyku".

Narysuj sobie na kartce koszyk i kwadrat i pisz obok warunek jaki musi spe?ni? ka?dy wierzcho?ek ?eby by?o tak jak chcesz. Tak to najpro?ciej zrozumie?.

Jak chcesz aby funkcja zwraca?a TRUE tylko gdy ca?y element jest w kwadracie to warunek powinien wygl?da? mniej wi?cej tak:

function isScreenElementInPosition(x1y1w1h1x2y2w2h2)
    return x2 x1 and
        x2 w2 x1 w1 and
        y2 y1 and
        y2 h2 y1 h1;
end


Tutaj masz skrypt do przetestowania, ?e to faktycznie dzia?a:

function isScreenElementInPosition(x1y1w1h1x2y2w2h2)
    return x2 x1 and
        x2 w2 x1 w1 and
        y2 y1 and
        y2 h2 y1 h1;
end

local koszyk = {
    200,
    200,
    150,
    150
};
local kwadrat = {
    100,
    100,
    100,
    100
};

addEventHandler('onClientRender'root, function (delta)
    local progress math.sin(getTickCount()/3000);
    local newXnewYinterpolateBetween(20020004004000progress'Linear');

    kwadrat.newX;
    kwadrat.newY;

    local kwadratColor 0xFFFF0000;
    if isScreenElementInPosition(koszyk.xkoszyk.ykoszyk.wkoszyk.hkwadrat.xkwadrat.ykwadrat.wkwadrat.hthen
        kwadratColor 0xFF00FF00;
    end
    
    --draw koszyk
    dxDrawLine(koszyk.xkoszyk.ykoszyk.koszyk.wkoszyk.y0xFF0000001true);
    dxDrawLine(koszyk.xkoszyk.ykoszyk.xkoszyk.koszyk.h0xFF0000001true);
    dxDrawLine(koszyk.koszyk.wkoszyk.ykoszyk.koszyk.wkoszyk.koszyk.h0xFF0000001true);
    dxDrawLine(koszyk.xkoszyk.koszyk.hkoszyk.koszyk.wkoszyk.koszyk.h0xFF0000001true);
    
    --draw kwadrat
    dxDrawRectangle(kwadrat.xkwadrat.ykwadrat.wkwadrat.hkwadratColorfalse);
end);   

Profesjonalna pomoc, dziekuje bardzo
:piwo: R*

Postaw piwo autorowi tego posta
 

 
Tagi: obliczenie :: pozycji :: ekranu :: [kwadrat+koszyk] :: [nr
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA » Obliczenie pozycji ekranu [KWADRAT+KOSZYK] [NR 2] 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