Рисование на экране — различия между версиями
Материал из GTAModding.ru
VcSaJen (обсуждение | вклад) (Новая: =Рисование на экране. Вывод 2D текстур и текста= Чтобы рисовать на экране, нужно включить режим рисован...) |
VcSaJen (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
[code]03f0: enable_text_draw 1[/code] | [code]03f0: enable_text_draw 1[/code] | ||
− | При первом запуске игры значение рисования не определено и текстуры будут "висеть" на | + | При первом запуске игры значение рисования не определено и текстуры будут "висеть" на экране вечно. |
− | + | При значении параметра 1 - текстуры будут рисоваться на несколько миллисекунд, надо их рисовать в цикле с wait 0. | |
− | экране вечно. | + | |
− | При значении параметра 1 - текстуры будут рисоваться на несколько миллисекунд, надо их | + | |
− | + | ||
− | рисовать в цикле с wait 0. | + | |
При значении параментра 0 - текстуры не рисуются. | При значении параментра 0 - текстуры не рисуются. | ||
Строка 21: | Строка 17: | ||
03f0: enable_text_draw 0[/code] | 03f0: enable_text_draw 0[/code] | ||
− | ВНИМАНИЕ! В некоторых случаях (например, при входе в раздевалку) значение | + | ВНИМАНИЕ! В некоторых случаях (например, при входе в раздевалку) значение enable_text_draw сбрасывается в неопределённое и тогда текстуры не будут стираться, итог - вылет через две секунды. Так что во время рисования заморозте игрока (01B4: set_player $PLAYER_CHAR can_move 0) и установите $ONMISSION в true. |
− | + | ||
− | enable_text_draw сбрасывается в неопределённое и тогда текстуры не будут стираться, итог | + | |
− | + | ||
− | - вылет через две секунды. Так что во время рисования заморозте игрока (01B4: set_player | + | |
− | + | ||
− | $PLAYER_CHAR can_move 0) и установите $ONMISSION в true. | + | |
Либо всё время устанавливайте 03f0: enable_text_draw 1. | Либо всё время устанавливайте 03f0: enable_text_draw 1. | ||
Строка 39: | Строка 29: | ||
После загрузки нужно загрузить сами текстуры опкодом | После загрузки нужно загрузить сами текстуры опкодом | ||
[code]038F: load_texture "MyTexture" as 1[/code] | [code]038F: load_texture "MyTexture" as 1[/code] | ||
− | где "MyTexture" - имя текстуры внути TXD файла, 1 - слот, в который мы загружаем | + | где "MyTexture" - имя текстуры внути TXD файла, 1 - слот, в который мы загружаем текстуру. |
− | + | ||
− | текстуру. | + | |
Например: | Например: | ||
Строка 58: | Строка 46: | ||
Текстуры рисуются опкодами: | Текстуры рисуются опкодами: | ||
[code]038D: draw_texture 2 position 160.0 112.0 scale 320.0 224.0 RGBA 150 150 150 255 | [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 | + | 074B: draw_texture 2 position 160.0 112.0 scale 320.0 224.0 angle 90.0 RGBA 150 150 150 255[/code] |
− | + | ||
− | 255[/code] | + | |
Второй отличается от первого тем, что можно задать угол поворота текстуры. | Второй отличается от первого тем, что можно задать угол поворота текстуры. | ||
Строка 69: | Строка 55: | ||
Парамерты после RGBA - цвет в формате RGB и прозрачность текстуры (255 - не прозрано). | Парамерты после RGBA - цвет в формате RGB и прозрачность текстуры (255 - не прозрано). | ||
− | Как определить координаты текстуры? Очень муторно. Короче левый верхний квадрат имеет | + | Как определить координаты текстуры? Очень муторно. Короче левый верхний квадрат имеет координату 0.0 0.0, а правый нижний - координату 640.0 448.0. Координаты расчитываются от середины текстуры. |
− | + | С помощью калькулятора и Paint'а высчитывать координаты текстур - неприятное дело, так что проще воспользоваться моей программой [url=]San Andreas Texture Placer[/url]. С её помощью можно расставить текстуры как следует. | |
− | координату 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[/code] | ||
, например: | , например: |
Версия 07:35, 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 текстур.
Рисование текста
В скором времени будет