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: 3800 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(x1, y1, w1, h1, x2, y2, w2, h2)
    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: 30
Na forum: 3415 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(x1, y1, w1, h1, x2, y2, w2, h2)
    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(x1, y1, w1, h1, x2, y2, w2, h2)
    return x2 > x1 and
        x2 + w2 < x1 + w1 and
        y2 > y1 and
        y2 + h2 < y1 + h1;
end

local koszyk = {
    x = 200,
    y = 200,
    w = 150,
    h = 150
};
local kwadrat = {
    x = 100,
    y = 100,
    w = 100,
    h = 100
};

addEventHandler('onClientRender', root, function (delta)
    local progress = math.sin(getTickCount()/3000);
    local newX, newY, _ = interpolateBetween(200, 200, 0, 400, 400, 0, progress, 'Linear');

    kwadrat.x = newX;
    kwadrat.y = newY;

    local kwadratColor = 0xFFFF0000;
    if isScreenElementInPosition(koszyk.x, koszyk.y, koszyk.w, koszyk.h, kwadrat.x, kwadrat.y, kwadrat.w, kwadrat.h) then
        kwadratColor = 0xFF00FF00;
    end
    
    --draw koszyk
    dxDrawLine(koszyk.x, koszyk.y, koszyk.x + koszyk.w, koszyk.y, 0xFF000000, 1, true);
    dxDrawLine(koszyk.x, koszyk.y, koszyk.x, koszyk.y + koszyk.h, 0xFF000000, 1, true);
    dxDrawLine(koszyk.x + koszyk.w, koszyk.y, koszyk.x + koszyk.w, koszyk.y + koszyk.h, 0xFF000000, 1, true);
    dxDrawLine(koszyk.x, koszyk.y + koszyk.h, koszyk.x + koszyk.w, koszyk.y + koszyk.h, 0xFF000000, 1, true);
    
    --draw kwadrat
    dxDrawRectangle(kwadrat.x, kwadrat.y, kwadrat.w, kwadrat.h, kwadratColor, false);
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: 3800 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(x1, y1, w1, h1, x2, y2, w2, h2)
    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(x1, y1, w1, h1, x2, y2, w2, h2)
    return x2 > x1 and
        x2 + w2 < x1 + w1 and
        y2 > y1 and
        y2 + h2 < y1 + h1;
end

local koszyk = {
    x = 200,
    y = 200,
    w = 150,
    h = 150
};
local kwadrat = {
    x = 100,
    y = 100,
    w = 100,
    h = 100
};

addEventHandler('onClientRender', root, function (delta)
    local progress = math.sin(getTickCount()/3000);
    local newX, newY, _ = interpolateBetween(200, 200, 0, 400, 400, 0, progress, 'Linear');

    kwadrat.x = newX;
    kwadrat.y = newY;

    local kwadratColor = 0xFFFF0000;
    if isScreenElementInPosition(koszyk.x, koszyk.y, koszyk.w, koszyk.h, kwadrat.x, kwadrat.y, kwadrat.w, kwadrat.h) then
        kwadratColor = 0xFF00FF00;
    end
    
    --draw koszyk
    dxDrawLine(koszyk.x, koszyk.y, koszyk.x + koszyk.w, koszyk.y, 0xFF000000, 1, true);
    dxDrawLine(koszyk.x, koszyk.y, koszyk.x, koszyk.y + koszyk.h, 0xFF000000, 1, true);
    dxDrawLine(koszyk.x + koszyk.w, koszyk.y, koszyk.x + koszyk.w, koszyk.y + koszyk.h, 0xFF000000, 1, true);
    dxDrawLine(koszyk.x, koszyk.y + koszyk.h, koszyk.x + koszyk.w, koszyk.y + koszyk.h, 0xFF000000, 1, true);
    
    --draw kwadrat
    dxDrawRectangle(kwadrat.x, kwadrat.y, kwadrat.w, kwadrat.h, kwadratColor, false);
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