Всем привет меня зовут Sedance и в этом моём 1 уроке,я покажу как сделать СПИДОМЕТОР для Автомобилей GTA SA.
Крч будем привязывать к тачке спидометор. -------------------------------------------------------------------------------------------------------------------------------------------- ------------------
Первым шагом будет поиск нужных текстур. (Найдёте в интернете их много) И так я нашел подходящие картинки для спидометра. Эти картинки я закинул в новый TXD-архив SPEED, который вы можете скачать (по сыллке ниже) и поместил в папку models/txd.
Запускаем наш Санни Билдер, и создаём новый документ. Проверим, сначала, если игрок не найден, то завершим наш поток:
Код
{$CLEO}
0000:
thread 'SPEED'
if
Player.Defined($PLAYER_CHAR)
jf @SPEED_END
// // //
:SPEED_END
wait 0
0A93: end_custom_thread
Если всё Сработало, то создаём новый бесконечный цикл. В нём напишем проверку: "Актёр $PLAYER_ACTOR в транспорте". Если этот так, то загружаем наш архив текстур и сами картинки,
которые она содержит.
Код
while true
if
Actor.Driving($PLAYER_ACTOR)
then
0390: load_txd_dictionary 'SPEED'
038F: load_texture "CIRCLE" as 1
038F: load_texture "STRELK" as 2
// // // // //
0391: release_txd_dictionary
end
wait 0
end
Крч далее выгружаем это из памяти И на месте комментариев, нам понадобится ещё один цикл while. Проверка будет такая-же, как и в условие IF, в которого вложен цикл:
Код
while Actor.Driving($PLAYER_ACTOR)
03F0: enable_text_draw 1
wait 0
end
Cледующий пункт - рисование текстур это наверное самое фигня из Фигни.. Обе картинки у нас имеют размер 256х256, Думаю это мнаговато. По-этому рисовать текстуры мы будем размером 128х128.
Первую текстуру мы будем рисовать опкодом 038D, так как мы не собираемся её привязывать к скорости. А вот вторую(стрелку) рисуем опкодом 074B, так как он может вращать картинки на экране. В нас получится следующее:
Код
while Actor.Driving($PLAYER_ACTOR)
03F0: enable_text_draw 1
03E3: set_texture_to_be_drawn_antialiased 1
038D: draw_texture 1 position 540.0 280.0 size 128.0 128.0 RGBA 255 255 255 200
03E3: set_texture_to_be_drawn_antialiased 1
074B: draw_texture 2 position 540.0 280.0 scale 128.0 128.0 angle 2@ color_RGBA 255 255 255 128
wait 0
end
Всё, что нам осталось -
определить переменную 2@. Что-бы сделать скорость реалистичнее, и спидометр показывал более-менее правильные данные, мы должны перевести скорость машины(юниты) в километры. Я подсчитал, что для данного спидометра нужно умножить скорость машины на 4.0. Так как выбранная машина едет со скоростью 40 юнитов(в игре по ровной трассе), а в handling.cfg указано 160.0 км( или миль),
юниты должны быть умножены на 160 / 40 = 4. Следовательно, мы получим:
Код
03C0: 1@ = Actor $PLAYER_ACTOR car
02E3: 2@ = car 1@ speed
2@ *= 4.0
(Самая Тежёлая работа) Мы получили скорость машины. Нам осталось отобразить её на спидометре. Если так запустить скрипт, то стрелка будет в начале смотреть в низ, где никаких цифр не указано. Следовательно нам нужно сместить угол поворота стрелки на какой-то градус. Я вычислил, что для данного спидометра смещение должно быть на
54.0 градуса:
Ну вот наш код:
Код
{$CLEO}
0000:
thread 'SPEED'
if
Player.Defined($PLAYER_CHAR)
jf @SPEED_END
while true
if
Actor.Driving($PLAYER_ACTOR)
then
0390: load_txd_dictionary 'SPEED'
038F: load_texture "CIRCLE" as 1
038F: load_texture "STRELK" as 2
while Actor.Driving($PLAYER_ACTOR)
03F0: enable_text_draw 1
03E3: set_texture_to_be_drawn_antialiased 1
038D: draw_texture 1 position 540.0 280.0 size 128.0 128.0 RGBA 255 255 255 200
03E3: set_texture_to_be_drawn_antialiased 1
03C0: 1@ = Actor $PLAYER_ACTOR car
02E3: 2@ = car 1@ speed
2@ *= 4.0 // Переводим скорость с юнитов в километры
2@ += 54.0 // Поворачиваем текстуру стрелки на 54 градуса
074B: draw_texture 2 position 540.0 280.0 scale 128.0 128.0 angle 2@ color_RGBA 255 255 255 128
wait 0
end
0391: release_txd_dictionary
end
wait 0
end
:SPEED_END
wait 0
0A93: end_custom_thread
Оее, теперь всё готова, можно отдыхать.
Вот результат
Думаю помог.
SPEED: http://rghost.ru/47537049 Если что то не правильно, пишите исправлю.