Jump to content

[Решено] Создание правильного спидометра


Recommended Posts

Сделал я себе спидометр, начал проверять его в действии, как обнаружил, что максимальная отображаемая скорость не соответствует данным из handling. Как решить данную проблему и сделать так, чтобы SuperGT, максимальная скорость которой 230 была в действительности 230, а не так как сейчас в мта всего 179?

local xv, yv, zv = getElementVelocity(vehicle) 
local speed = 180*(xv^2 + yv^2 + zv^2) 

Edited by Guest
Link to comment

тогда почему часть авто с таким счётчиком едет строго в указанных рамках хедлинга, например премьер - 200 км, буллет - 230 км, а избранные авто едут на скорости ниже заданной?

Link to comment

Как я понял, у тебя спидометр развернут на 180 град( Pi рад). тебе надо сделать так: спидометр - окружность. Предположим, что точка с минимальным значением - 0, а максимальное Pi, тогда координата точки по оси X:

x = math.cos( 180*(xv^2 + yv^2 + zv^2)^(0.5) ) / MAX_SPEEDOMETR_SPEED * math.pi() + OFFSET )

и по У...

y = math.sin( 180*(xv^2 + yv^2 + zv^2)^(0.5) ) / MAX_SPEEDOMETR_SPEED * math.pi() + OFFSET )

Вам это надо оптимизировать под себя и найти нужное для вас значение OFFSET в рад., которое обозначает отклонение угла окружности.

Link to comment

Никогда автомобиль не будет точно соответствовать прописанным handling. Даже установка одинакового handling на разные модели - будет иметь разный эффект.

Как вариант решения проблемы, можно установить handling флаг - USE_MAXSP_LIMIT, тогда машина будет пытаться достичь этой скорости (если хватит мощности).

Хотя на сколько я помню, если автомобилю хватало мощности, то даже без этого флага скорость не выходила за пределы.

Скорость зависит от многих параметров, пробуйте fMass, fTurnMass, fDragMult, fEngineAcceleration, fEngineInertia

Link to comment

проблема решена:

Client

function onClientPreRender(frame) 
---- Спидометр -------------------------------------------------------------- 
    local vehicle = getPedOccupiedVehicle(localPlayer) 
    if (vehicle) then  
        local xv, yv, zv = getElementVelocity(vehicle) 
        local speed = 180*math.sqrt(xv^2 + yv^2 + zv^2) 
        dxDrawText(string.format('%.0f',speed).. "km/h",sw*430,sh*300,sw*620,sh*437,tocolor(255,255,255,255),dsize*1.7,"clear","left","top") 
  

Server

function resourceStarter() 
    for m = 400,611 do 
        local handling = getOriginalHandling(m) 
        -- решение проблемы 
        handling.handlingFlags = bitOr(handling.handlingFlags,0x1000000) 
        setModelHandling(m,"handlingFlags",handling.handlingFlags) 
        setModelHandling(m,"dragCoeff",0) 
    end 
end 
addEventHandler("onResourceStart",getRootElement(),resourceStarter) 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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