Рисование на экране — различия между версиями
Материал из GTAModding.ru
VcSaJen (обсуждение | вклад) |
VcSaJen (обсуждение | вклад) |
||
Строка 146: | Строка 146: | ||
==Рисование текста== | ==Рисование текста== | ||
В скором времени будет | В скором времени будет | ||
− | [[Категория:GTA_SA]][[Категория:Скрипты]] | + | [[Категория:GTA_SA]][[Категория:Туториалы]][[Категория:Скрипты]] |
Версия 07:37, 24 декабря 2008
Рисование на экране. Вывод 2D текстур и текста
Чтобы рисовать на экране, нужно включить режим рисования опкодом [code]03f0: enable_text_draw 1[/code]
При первом запуске игры значение рисования не определено и текстуры будут "висеть" на экране вечно. При значении параметра 1 - текстуры будут рисоваться на несколько миллисекунд, надо их рисовать в цикле с wait 0. При значении параментра 0 - текстуры не рисуются.
Пример:
[code]03f0: enable_text_draw 1 while 80E1: not pressed_key 0 19
{Рисование...} wait 0
end 03f0: enable_text_draw 0[/code]
ВНИМАНИЕ! В некоторых случаях (например, при входе в раздевалку) значение enable_text_draw сбрасывается в неопределённое и тогда текстуры не будут стираться, итог - вылет через две секунды. Так что во время рисования заморозте игрока (01B4: set_player $PLAYER_CHAR can_move 0) и установите $ONMISSION в true. Либо всё время устанавливайте 03f0: enable_text_draw 1.
Рисование текстур
Что-бы рисовать текстуры, надо в начале загрузить TXD файл из папки \Models\TXD опкодом [code]0390: load_txd_dictionary 'MY_TXD'[/code] а после рисования выгрузить опкодом [code]0391: release_txd_dictionary[/code]
После загрузки нужно загрузить сами текстуры опкодом [code]038F: load_texture "MyTexture" as 1[/code] где "MyTexture" - имя текстуры внути TXD файла, 1 - слот, в который мы загружаем текстуру.
Например: [code]0390: load_txd_dictionary 'MY_TXD' 038F: load_texture "MyTextureOne" as 1 038F: load_texture "MyTextureTwo" as 2 03f0: enable_text_draw 1 while 80E1: not pressed_key 0 19
{Рисование...} wait 0
end 03f0: enable_text_draw 0 0391: release_txd_dictionary[/code]
Перейдём теперь непосредственно к рисованию. Текстуры рисуются опкодами: [code]038D: draw_texture 2 position 160.0 112.0 scale 320.0 224.0 RGBA 150 150 150 255 074B: draw_texture 2 position 160.0 112.0 scale 320.0 224.0 angle 90.0 RGBA 150 150 150 255[/code]
Второй отличается от первого тем, что можно задать угол поворота текстуры.
Итак, первый параметр - это слот текстуры, который мы задали в опкоде 038F. Пара параметров после position - это координаты текстуры (см. ниже). Пара параметров после scale - это размеры текстуры на экране (см. ниже). Парамерты после RGBA - цвет в формате RGB и прозрачность текстуры (255 - не прозрано).
Как определить координаты текстуры? Очень муторно. Короче левый верхний квадрат имеет координату 0.0 0.0, а правый нижний - координату 640.0 448.0. Координаты расчитываются от середины текстуры. С помощью калькулятора и Paint'а высчитывать координаты текстур - неприятное дело, так что проще воспользоваться моей программой [url=]San Andreas Texture Placer[/url]. С её помощью можно расставить текстуры как следует.
Что-бы не было пикселизации текстуры и текстура была сглаженной нужно перед рисованием текстуры поставть опкод [code]03E3: set_texture_to_be_drawn_antialiased 1[/code] , например: [code]03E3: set_texture_to_be_drawn_antialiased 1 038D: draw_texture 2 position 160.0 112.0 size 320.0 224.0 RGBA 150 150 150 255 03E3: set_texture_to_be_drawn_antialiased 1 038D: draw_texture 2 position 480.0 112.0 size -320.0 224.0 RGBA 150 150 150 255[/code]
Аналогично текстурам можно рисовать прямоугольники опкодом: [code]038E: draw_box_position 320.0 224.0 size 640.0 448.0 RGBA 255 0 0 128 [/code] все параметры те же, что у текстур, только нет номера текстуры.
Пример рисования (прыгающий шарик): [code]thread 'ball'
{$CLEO}
var
$PLAYER_CHAR: Player $PLAYER_ACTOR: Actor 1@: Float 2@: Float 3@: Float 4@: Float 5@: Float
end
const
BALL_SPEED = 5.0
end
while true
if and $PLAYER_CHAR.Defined $PLAYER_CHAR.Controllable $ONMISSION == false not $PLAYER_ACTOR.Driving 00E1: pad 0 pressed_key 4 // клавиша Действие then 0390: load_txd_dictionary 'LD_DUAL' 038F: load_texture "light" as 1 03f0: enable_text_draw 1 $PLAYER_CHAR.CanMove = false $ONMISSION = true 1@ = 320.0 // Установка начальных координат 2@ = 224.0 // 3@ = Random(0.0, 360.0) // Устанавливается случайных угол 02F6: 4@ = cosine 3@ // Разложение скорости по оси X 4@ *= BALL_SPEED // 02F7: 5@ = sine 3@ // Разложение скорости по оси Y 5@ *= BALL_SPEED // while 80E1: not pad 0 pressed_key 15 // клавиша Вход/Выход if or 1@ <= 0.0 1@ >= 640.0 then // Если Vx выходит за границы, то 4@ *= -1.0 // обратим скорость по X jump @A end if or 2@ <= 0.0 2@ >= 447.0 then // Если Vy выходит за границы, то 5@ *= -1.0 // обратим скорость по Y jump @A end :A 1@+=4@ 2@+=5@ 03f0: enable_text_draw 1 03E3: set_texture_to_be_drawn_antialiased 1 038D: draw_texture 1 position 1@ 2@ scale 25.0 25.0 RGBA 255 255 255 255 wait 0 end $ONMISSION = false $PLAYER_CHAR.CanMove = true 03f0: enable_text_draw 0 0391: release_txd_dictionary end wait 0
end 0A93: end_custom_thread[/code]
Ограничения: Всего одномоментно может рисоваться 128 текстур.
Рисование текста
В скором времени будет