Рисование на экране — различия между версиями
Материал из GTAModding.ru
VcSaJen (обсуждение | вклад) |
Seemann (обсуждение | вклад) (→Рисование на экране. Вывод 2D текстур и текста) |
||
Строка 1: | Строка 1: | ||
− | |||
− | |||
Чтобы рисовать на экране, нужно включить режим рисования опкодом | Чтобы рисовать на экране, нужно включить режим рисования опкодом | ||
− | + | <source lang="scm">03F0: enable_text_draw 1</source> | |
При первом запуске игры значение рисования не определено и текстуры будут "висеть" на экране вечно. | При первом запуске игры значение рисования не определено и текстуры будут "висеть" на экране вечно. | ||
− | При значении параметра 1 - текстуры будут рисоваться на несколько миллисекунд, надо их рисовать в цикле с wait 0. | + | При значении параметра 1 - текстуры будут рисоваться на несколько миллисекунд, надо их рисовать в цикле с [[0001|wait]] 0. |
− | При значении | + | При значении параметра 0 - текстуры не рисуются. |
Пример: | Пример: | ||
− | + | <source lang="scm">03F0: enable_text_draw 1 | |
while 80E1: not pressed_key 0 19 | while 80E1: not pressed_key 0 19 | ||
{Рисование...} | {Рисование...} | ||
wait 0 | wait 0 | ||
end | end | ||
− | + | 03F0: enable_text_draw 0</source> | |
− | ВНИМАНИЕ! В некоторых случаях (например, при входе в раздевалку) значение enable_text_draw сбрасывается в неопределённое и тогда текстуры не будут стираться, итог - вылет через две секунды. Так что во время рисования | + | ВНИМАНИЕ! В некоторых случаях (например, при входе в раздевалку) значение enable_text_draw сбрасывается в неопределённое и тогда текстуры не будут стираться, итог - вылет через две секунды. Так что во время рисования заморозьте игрока ([[01B4]]: set_player $PLAYER_CHAR can_move 0) и установите [[0180|$ONMISSION]] в true. |
− | Либо всё время устанавливайте | + | Либо всё время устанавливайте [[03F0]]: enable_text_draw 1. |
− | + | ==Вывод текстур== | |
− | == | + | Чтобы рисовать текстуры, надо в начале загрузить [[TXD]] файл из папки \Models\TXD опкодом |
− | + | <source lang="scm">0390: load_txd_dictionary 'MY_TXD'</source> | |
− | + | ||
а после рисования выгрузить опкодом | а после рисования выгрузить опкодом | ||
− | + | <source lang="scm">0391: release_txd_dictionary</source> | |
После загрузки нужно загрузить сами текстуры опкодом | После загрузки нужно загрузить сами текстуры опкодом | ||
− | + | <source lang="scm">038F: load_texture "MyTexture" as 1</source> | |
где "MyTexture" - имя текстуры внути TXD файла, 1 - слот, в который мы загружаем текстуру. | где "MyTexture" - имя текстуры внути TXD файла, 1 - слот, в который мы загружаем текстуру. | ||
Например: | Например: | ||
− | + | <source lang="scm" >0390: load_txd_dictionary 'MY_TXD' | |
038F: load_texture "MyTextureOne" as 1 | 038F: load_texture "MyTextureOne" as 1 | ||
038F: load_texture "MyTextureTwo" as 2 | 038F: load_texture "MyTextureTwo" as 2 | ||
− | + | 03F0: enable_text_draw 1 | |
while 80E1: not pressed_key 0 19 | while 80E1: not pressed_key 0 19 | ||
{Рисование...} | {Рисование...} | ||
wait 0 | wait 0 | ||
end | end | ||
− | + | 03F0: enable_text_draw 0 | |
− | 0391: release_txd_dictionary | + | 0391: release_txd_dictionary</source> |
Перейдём теперь непосредственно к рисованию. | Перейдём теперь непосредственно к рисованию. | ||
− | Текстуры | + | |
− | + | Текстуры выводятся на экран опкодами: | |
− | 074B: draw_texture 2 position 160.0 112.0 scale 320.0 224.0 angle 90.0 RGBA 150 150 150 255 | + | <source lang="scm">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</source> | ||
Второй отличается от первого тем, что можно задать угол поворота текстуры. | Второй отличается от первого тем, что можно задать угол поворота текстуры. | ||
Строка 53: | Строка 51: | ||
Пара параметров после position - это координаты текстуры (см. ниже). | Пара параметров после position - это координаты текстуры (см. ниже). | ||
Пара параметров после scale - это размеры текстуры на экране (см. ниже). | Пара параметров после scale - это размеры текстуры на экране (см. ниже). | ||
− | + | Параметры после RGBA - цвет в формате RGB и прозрачность текстуры (255 - не прозрачно). | |
− | Как определить координаты текстуры? | + | Как определить координаты текстуры? Левый верхний квадрат имеет координату 0.0 0.0, а правый нижний - координату 640.0 448.0. Координаты рассчитываются от середины текстуры. |
− | С помощью калькулятора и Paint'а высчитывать координаты текстур - неприятное дело, так что проще воспользоваться | + | С помощью калькулятора и Paint'а высчитывать координаты текстур - неприятное дело, так что проще воспользоваться программой [[San Andreas Texture Placer]]. С её помощью можно расставить текстуры как следует. |
− | Что-бы не было пикселизации текстуры и текстура была сглаженной нужно перед рисованием текстуры | + | Что-бы не было пикселизации текстуры и текстура была сглаженной нужно перед рисованием текстуры поставить опкод |
− | + | <source lang="scm">03E3: set_texture_to_be_drawn_antialiased 1</source> | |
− | + | например: | |
− | + | <source lang="scm">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 | 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 | 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 | + | 038D: draw_texture 2 position 480.0 112.0 size -320.0 224.0 RGBA 150 150 150 255</source> |
Аналогично текстурам можно рисовать прямоугольники опкодом: | Аналогично текстурам можно рисовать прямоугольники опкодом: | ||
− | + | <source lang="scm">038E: draw_box_position 320.0 224.0 size 640.0 448.0 RGBA 255 0 0 128</source> | |
все параметры те же, что у текстур, только нет номера текстуры. | все параметры те же, что у текстур, только нет номера текстуры. | ||
Пример рисования (прыгающий шарик): | Пример рисования (прыгающий шарик): | ||
− | + | <source lang="scm" line>thread 'ball' | |
{$CLEO} | {$CLEO} | ||
Строка 139: | Строка 137: | ||
wait 0 | wait 0 | ||
end | end | ||
− | 0A93: end_custom_thread | + | 0A93: end_custom_thread</source> |
− | Ограничения: | + | Ограничения: всего в один момент времени на экран может выводиться до 128 текстур. |
− | + | ||
==Рисование текста== | ==Рисование текста== | ||
В скором времени будет | В скором времени будет | ||
[[Категория:GTA_SA]][[Категория:Туториалы]][[Категория:Скрипты]] | [[Категория:GTA_SA]][[Категория:Туториалы]][[Категория:Скрипты]] |
Версия 08:27, 24 декабря 2008
Чтобы рисовать на экране, нужно включить режим рисования опкодом
03F0: enable_text_draw 1
При первом запуске игры значение рисования не определено и текстуры будут "висеть" на экране вечно. При значении параметра 1 - текстуры будут рисоваться на несколько миллисекунд, надо их рисовать в цикле с wait 0. При значении параметра 0 - текстуры не рисуются.
Пример:
03F0: enable_text_draw 1 while 80E1: not pressed_key 0 19 {Рисоание...} wait 0 end 03F0: enable_text_draw 0
ВНИМАНИЕ! В некоторых случаях (например, при входе в раздевалку) значение enable_text_draw сбрасывается в неопределённое и тогда текстуры не будут стираться, итог - вылет через две секунды. Так что во время рисования заморозьте игрока (01B4: set_player $PLAYER_CHAR can_move 0) и установите $ONMISSION в true. Либо всё время устанавливайте 03F0: enable_text_draw 1.
Вывод текстур
Чтобы рисовать текстуры, надо в начале загрузить TXD файл из папки \Models\TXD опкодом
0390: load_txd_dictionary 'MY_TXD'
а после рисования выгрузить опкодом
0391: release_txd_dictionary
После загрузки нужно загрузить сами текстуры опкодом
038F: load_texture "MyTexture" as 1
где "MyTexture" - имя текстуры внути TXD файла, 1 - слот, в который мы загружаем текстуру.
Например:
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
Перейдём теперь непосредственно к рисованию.
Текстуры выводятся на экран опкодами:
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
Второй отличается от первого тем, что можно задать угол поворота текстуры.
Итак, первый параметр - это слот текстуры, который мы задали в опкоде 038F. Пара параметров после position - это координаты текстуры (см. ниже). Пара параметров после scale - это размеры текстуры на экране (см. ниже). Параметры после RGBA - цвет в формате RGB и прозрачность текстуры (255 - не прозрачно).
Как определить координаты текстуры? Левый верхний квадрат имеет координату 0.0 0.0, а правый нижний - координату 640.0 448.0. Координаты рассчитываются от середины текстуры. С помощью калькулятора и Paint'а высчитывать координаты текстур - неприятное дело, так что проще воспользоваться программой San Andreas Texture Placer. С её помощью можно расставить текстуры как следует.
Что-бы не было пикселизации текстуры и текстура была сглаженной нужно перед рисованием текстуры поставить опкод
03E3: set_texture_to_be_drawn_antialiased 1
например:
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
Аналогично текстурам можно рисовать прямоугольники опкодом:
038E: draw_box_position 320.0 224.0 size 640.0 448.0 RGBA 255 0 0 128
все параметры те же, что у текстур, только нет номера текстуры.
Пример рисования (прыгающий шарик):
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
Ограничения: всего в один момент времени на экран может выводиться до 128 текстур.
Рисование текста
В скором времени будет