Вопросы

как сделать спидометр. Я пытался но ничего не вышло вот код:

//глобал
new speed;
OnGameModeInit()
{

    speed = CreatePlayerTextDraw(playerid, 577.916625427.259338"КМ/H");
    return 1;
}

//в конце мода
stock getspeed(playerid)
{
    new cord[5];
    new carid;
    carid = GetPlayerVehicleID(playerid);
    new veloc = GetVehicleVelocity(carid,cord[0]],cord[1],cord[2]);
    new str[60];
    format(str,sizeof(str),"Скорость(velocity) %f",veloc);
    PlayerTextDrawSetString(speed,str);
    PlayerTextDrawShow(playerid,speed);
    return 1;
}
public OnPlayerStateChange(функции не все помню,т.к пишу с телефона)
{
    if(newstate == PLAYER_STATE_DRIVER)
    {
        SetTimer("getspeed",500,true);

    }
    if(oldstate == PLAYER_STATE_DRIVER)
    {
        PlayerTextDrawHide(playerid,speed);
    }
    return 1;
}

 

Отредактировано пользователем Antoxa39
Причина: надо

Поделиться сообщением


Ссылка на сообщение

7 ответов на этот вопрос

  • 2

@Antoxa39 А это уже ваш косяк, не были обозначены переменные (new Float:name), неправильно находилась скорость автомобиля.

Вот вам более оптимизированный код:

public getspeed(playerid)
{
    new Float:cord[3];
    GetVehicleVelocity(GetPlayerVehicleID(playerid),cord[0], cord[1], cord[2]);
    new veloc = floatsqroot(vx * vx + vy * vy + vz * vz);
    new str[25];
    format(str,sizeof(str),"Скорость(velocity) %f",veloc);
    PlayerTextDrawSetString(speed,str);
    return 1;
}

 

Поделиться сообщением


Ссылка на сообщение
  • 1
3 часа назад, Antoxa39 сказал:

@Sleash`en Все что я не понял,это функцию floatsqroot. Для чего она нужна здесь?

 

Вот вам и математика, и физика :haha:

 

Мы на сервере играем в трехмерном пространстве. Скорость, с которой мы движемся, - векторная величина, которая, соответственно, может быть представлена как вектор. Вектор можно разложить на составляющие (спроецировать вектор на оси). В нашем случае есть некоторый вектор AB, который можно спроецировать оси OXOY и OZ. Графически это выглядит примерно так (см. спойлер).

 

Спойлер

изображение_2022-01-24_222051.png

 

Именно эти величины (OX, OY, OZ) и возвращает функция GetVehicleVelocity.

 

Длина вектора AB (это же называется модулем вектора AB и это же в нашем случае является скоростью) - корень из суммы квадратов координат вектора, то есть его составляющих: |AB| = sqrt(x^2 + y^2 + z^2). Именно эта формула и записана в функции:

floatsqroot(vx * vx + vy * vy + vz * vz);

 

Поделиться сообщением


Ссылка на сообщение
  • 0

Я только недавно делал урок по таймерам.

В вашем случае следует использовать - SetTimerEx

И для таймеров используется ТОЛЬКО forward + public

P. S. ссылка на урок: *click*

 

Если не понятно, то вот решение:

Переменная кстати должна быть такая:

new Text: speed;

Дальше добавляем форвард для паблика:

forward getspeed(playerid);

Дальше сам паблик:

public getspeed(playerid) 

{

    // Код из, стока

И таймер ставим так:

SetTimerEx("getspeed", 500, true, "d", playerid);

И кстати, после изменения строки в текстдрав не обязательно его по-новой показывать, изменения проходят в реальном времени

Отредактировано пользователем Sleash`en

Поделиться сообщением


Ссылка на сообщение
  • 0

@Sleash`en Извиняюсь, но оно не работает. Значение всегда на 0.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Sleash`en cпасибо большое. Все что я не понял,это функцию floatsqroot. Для чего она нужна здесь? Вот офф ответ из samp-wiki: floatsqroot Вычисляет квадратный корень из числа.

 

@Sleash`en округлить можно  с помощью floatround и floatpower?

 

@Sleash`en cразу спасибо за обьяснение) скрины жмякс:)

Поделиться сообщением


Ссылка на сообщение
  • 0

@Antoxa39 очень сильно извиняюсь, буквально надо заменить удну букву. 

Вот это:

format(str,sizeof(str),"Скорость(velocity) %f",veloc); 

На это

format(str,sizeof(str),"Скорость(velocity) %d",veloc);

 

UPD: , Раз выводим int, то и также замените получение veloc на это:

new veloc = floatround(floatsqroot(vx * vx + vy * vy + vz * vz));

Отредактировано пользователем Sleash`en

Поделиться сообщением


Ссылка на сообщение
  • 0

@Sleash`en, спасибо) но я уже и так все пофиксил) но вам все равно +сик

Отредактировано пользователем Cawfee
Причина: удалил цитату.

Заметка от Cawfee , создано

Для того, чтобы ответить пользователю, используйте кнопку "Ответить", не нужно цитировать все сообщение пользователя, если в этом нет необходимости.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };