Jump to content

the degree of tilt of the aircraft to the side


Recommended Posts

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")

Beztytulu.png

https://ibb.co/QvbvP1g (png)

A chciałbym tak po przechyleniu samolotu na bok (jak na zdjęciu)

przechyl-w-bok.png

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 by Matevsz
Link to comment

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 by FileEX
Link to comment
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

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
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

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

  • Like 1
Link to comment
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
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 😉

  • Like 1
Link to comment
  • ds1-e locked this topic
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...