Matevsz Posted April 7 Share Posted April 7 (edited) Witam, mam problem z przesunięciem zdjęcia kuli w prawo lub w lewo w zależności od aktualnego przechyłu samolotu na bok. położenie piłki w środku dxDrawRelativeImage(373 + 118, 741 + 149, 17, 17, "Zegary/kulka.png") https://ibb.co/QvbvP1g (png) A chciałbym tak po przechyleniu samolotu na bok (jak na zdjęciu) https://ibb.co/ZLncxgF (png) pozycja piłki po lewej stronie byłaby 373 + 72, 741 + 144, 17, 17 i w prawo 373 + 164, 741 + 144, 17, 17 Edited April 7 by Matevsz Link to comment
FileEX Posted April 7 Share Posted April 7 (edited) Opis jest trochę nie jasny, tak samo jak zdjęcia. Na czym dokładnie polega problem? Czym jest ta "piłka"? PS: Jeśli piszesz po polsku to zakładaj temat w polskim dziale. Edited April 7 by FileEX Link to comment
Matevsz Posted April 7 Author Share Posted April 7 43 minutes ago, FileEX said: Opis jest trochę nie jasny, tak samo jak zdjęcia. Na czym dokładnie polega problem? Czym jest ta "piłka"? PS: Jeśli jest dostępny po polsku, to autor tematu w języku polskim. Sorry, my browser automatically translated the text before submitting the topic. I would like the given ball visible in the first photo (in the middle) to move left or right depending on the current degree of the plane's sideways tilt. If the plane banked 90 or 180 degrees to the left? (as in the second photo), then the ball should move to the left to the given coordinates 373 + 72, 741 + 144, 17, 17 If the plane tilts 90/180 degrees to the right, the ball should move to the right to the coordinates 373 + 164, 741 + 144, 17, 17 I'm sending a photo of what it should look like https://tinypic.host/image/3.DhZu6f Link to comment
FileEX Posted April 7 Share Posted April 7 Skoro przeglądarka przetłumaczyła tekst na polski to domyślam się, że jesteś Polakiem (tak jak i ja), a zatem odpowiem po polsku. Rozumiem, że chcesz aby kulka przesuwała się w lewo lub prawo w zależności od nachylenia się samolotu. Możemy obliczać położenie kulki na podstawie rotacji samolotu. Utwórzmy offset, który będzie dodawany/odejmowany do aktualnej pozycji piłeczki i będzie on 100% w przypadku maksymalnego wychylenia. local ballX, ballY = -- pozycja kulki na środku paska local offset local maxAngle = 90 -- maksymalne wychylenie przy którym kulka będzie na końcu paska -- pobieramy rotację samolotu local rx,ry,rz = getElementRotation(plane) -- nie wiem teraz z pamięci która oś odpowiada za przechył na boki, więc zakładam, że X if (rx < 0) then -- przechylenie w lewo offset = -(szerokoscPaska / 2 + rozmiarKulki/ 2) elseif (rx > 0) then offset = szerokoscPaska / 2 + rozmiarKulki end offset = offset * (math.abs(rx) / maxAngle) Coś w ten sposób mniej więcej i teraz do kulki po prostu dodajesz ten offset. Zakładam, że offset to po prostu połowa paska bo kulka jest na jego środku. Do pełni szczęścia musisz jeszcze zrobic to samo dla osi Y. Link to comment
Matevsz Posted April 7 Author Share Posted April 7 1 hour ago, FileEX said: Skoro przeglądarka przetłumaczyła tekst na polski to domyślam się, że jesteś Polakiem (tak jak i ja), a zatem odpowiedźm po polsku. , że chcesz, aby kulka przesuwała się w lewo lub prawo w zależności od ustawienia się. Obliczanie podstawy kulki na podstawie rotacji. Utwórzmy offset, który będzie dodawany/odejmowany do aktualnych pozycji piłeczki i będzie na 100% w przypadku wystąpienia wychylenia. Coś w dziesięć sposobów mniej więcej i teraz do kulki po prostu daj dziesięć offsetów. Zakładam, że offset to po prostu połowa paska bo kulka jest na jego środku. Do pełni szczęścia jeszcze raz to samo dla osi Y. Co masz na myśli szerokość paska? Próbowałem w ten sposób ale kulka przesuwa się poza obręb zegara local samolotyZStalymPodwoziem = { [417] = true, [425] = true, [447] = true, [460] = true, [469] = true, [487] = true, [488] = true, [497] = true, [511] = true, [512] = true, [513] = true, [548] = true, [563] = true, [593] = true } local rollDegrees = 0 function Zegary() ----przechył samolotu w lewo i prawo local vehicle = getPedOccupiedVehicle(localPlayer) if not vehicle or not samolotyZStalymPodwoziem[getElementModel(vehicle)] then return end local _, _, rotation = getElementRotation(vehicle) rollDegrees = rotation local centerX = 373 + 118 --środek kulki X local centerY = 741 + 149 --środek kulki Y local maxOffsetLeftX = 373 + 72 -- maksymalna pozycja kulki po lewej względem 90 stopni (373 + 72, 741 + 144, 17, 17) local maxOffsetRightX = 741 + 164 -- maksymalna pozycja kulki po prawej względem 90 stopni (373 + 164, 741 + 144, 17, 17) local xOffset = 0 if rollDegrees >= -90 and rollDegrees <= 0 then xOffset = -maxOffsetLeftX * (rollDegrees / -90) elseif rollDegrees > 0 and rollDegrees <= 90 then xOffset = maxOffsetRightX * (rollDegrees / 90) end local newX = centerX + xOffset local newY = 741 + 144 outputDebugString("Aktualny stopien przechyłu samolotu: " .. tostring(rollDegrees)) dxDrawRelativeImage(373, 741, 257, 244, "Zegary/Turn_indicator.png") dxDrawRelativeImage(373 + 56, 741 + 96, 142, 34, "Zegary/samolot.png") dxDrawRelativeImage(newX, newY, 17, 17, "Zegary/kulka.png") --domyślnie dxDrawRelativeImage(373 + 118, 741 + 149, 17, 17, "Zegary/kulka.png") end local pokazZegary = false function toggleRender(bool) if bool then pokazZegary = true addEventHandler("onClientRender", root, Zegary) else pokazZegary = false removeEventHandler("onClientRender", root, Zegary) end end Link to comment
FileEX Posted April 7 Share Posted April 7 (edited) Aby móc poprawnie pozycjonować kulkę, ten biały pasek powinien być osobną grafiką https://imgur.com/xMErJtY Wyślij jak możesz grafikę tego paska oraz kulki jako osobne grafiki. Reszty zegara nie potrzebuję Edited April 7 by FileEX Link to comment
Matevsz Posted April 7 Author Share Posted April 7 32 minutes ago, FileEX said: Aby móc poprawnie pozycjonować kulkę, ten biały pasek powinien być osobną grafiką https://imgur.com/xMErJtY Wyślij jak możesz grafikę tego paska oraz kulki jako osobne grafiki. Reszty zegara nie potrzebuję Oczywiście, oto one: https://krakenfiles.com/view/DJE5sbnmjT/file.html Link to comment
FileEX Posted April 8 Share Posted April 8 Proszę local screenX, screenY = guiGetScreenSize(); local barW,barH = (108/1080) * screenY, (25/1080) * screenY; local barX,barY = screenX / 2 - barW / 2, screenY * 0.8; local ballX,ballY; local ballSize = (17/1080) * screenY; local ballCenterX = barX + barW / 2 - ballSize / 2; local ballY = barY + barH / 2 - ballSize / 2; local bar = dxCreateTexture("pasek.png"); local ball = dxCreateTexture("kulka.png"); addEventHandler('onClientRender', root, function() local veh = getPedOccupiedVehicle(localPlayer); if (veh and getVehicleType(veh) == 'Plane') then local _,ry = getElementRotation(veh); ry = ry % 360; local offset = 0; if (ry <= 90) then offset = ry; elseif (ry <= 180) then offset = (180 - ry); elseif (ry <= 270) then offset = -(ry - 180); else offset = -(360 - ry); end ballX = math.max(barX, math.min(barX + barW - ballSize, barX + barW / 2 + (offset/90) * (barW / 2) - ballSize / 2)); dxDrawImage(barX, barY, barW, barH, bar, 0, 0, 0, 0xFFFFFFFF); dxDrawImage(ballX, ballY, ballSize, ballSize, ball, 0, 0, 0, 0xFFFFFFFF); end end); Musisz sobie jedynie dopasować pozycje w osi Y oraz zmienić X do swojego paska. Ja obciąłem grafikę paska aby nie miała pustego tła wokół https://imgur.com/M0F1zdp 1 Link to comment
Matevsz Posted April 12 Author Share Posted April 12 On 08/04/2024 at 16:02, FileEX said: Proszę local screenX, screenY = guiGetScreenSize(); local barW,barH = (108/1080) * screenY, (25/1080) * screenY; local barX,barY = screenX / 2 - barW / 2, screenY * 0.8; local ballX,ballY; local ballSize = (17/1080) * screenY; local ballCenterX = barX + barW / 2 - ballSize / 2; local ballY = barY + barH / 2 - ballSize / 2; local bar = dxCreateTexture("pasek.png"); local ball = dxCreateTexture("kulka.png"); addEventHandler('onClientRender', root, function() local veh = getPedOccupiedVehicle(localPlayer); if (veh and getVehicleType(veh) == 'Plane') then local _,ry = getElementRotation(veh); ry = ry % 360; local offset = 0; if (ry <= 90) then offset = ry; elseif (ry <= 180) then offset = (180 - ry); elseif (ry <= 270) then offset = -(ry - 180); else offset = -(360 - ry); end ballX = math.max(barX, math.min(barX + barW - ballSize, barX + barW / 2 + (offset/90) * (barW / 2) - ballSize / 2)); dxDrawImage(barX, barY, barW, barH, bar, 0, 0, 0, 0xFFFFFFFF); dxDrawImage(ballX, ballY, ballSize, ballSize, ball, 0, 0, 0, 0xFFFFFFFF); end end); Musisz sobie jedynie dopasować pozycje w osi Y oraz zmienić X do swojego paska. Ja obciąłem grafikę paska aby nie miała pustego tła wokół https://imgur.com/M0F1zdp Ustawiłem w grze, dziękuje bardzo, mam jeszcze pytanie co do obrazu samolotu, jak mogę go przechylić w rotacji? aktualne współrzędne są podane by obraz samolotu był prosto a chciałbym żeby przechylał się tak jak porusza się kulka tylko po ukosie. Gdy kulka jest na max w lewo samolot byłby przechylony do drugiej kreski w lewo i tak samo w prawo Link to comment
Matevsz Posted April 13 Author Share Posted April 13 9 hours ago, Matevsz said: Ustawiłem w grze, dziękuje bardzo, mam jeszcze pytanie co do obrazu samolotu, jak mogę go przechylić w rotacji? aktualne współrzędne są podane by obraz samolotu był prosto a chciałbym żeby przechylał się tak jak porusza się kulka tylko po ukosie. Gdy kulka jest na max w lewo samolot byłby przechylony do drugiej kreski w lewo i tak samo w prawo Już sobie poradziłem 1 Link to comment
Recommended Posts