Рисование на экране — различия между версиями
Материал из GTAModding.ru
VcSaJen (обсуждение | вклад) |
Seemann (обсуждение | вклад) м |
||
(не показаны 16 промежуточных версий 1 участника) | |||
Строка 142: | Строка 142: | ||
==Рисование текста== | ==Рисование текста== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Основной опкод для рисования текста: | Основной опкод для рисования текста: | ||
− | <source lang="scm">033E: set_draw_text_position 320.0 407.0 GXT | + | <source lang="scm">033E: set_draw_text_position 320.0 407.0 GXT 'FEM_YES' |
− | + | ||
− | 'FEM_YES' | + | |
045A: draw_text_1number 320.0 407.0 GXT 'DOLLAR' number 72 | 045A: draw_text_1number 320.0 407.0 GXT 'DOLLAR' number 72 | ||
− | 045B: draw_text_2numbers 320.0 407.0 GXT 'TIME' numbers 5 | + | 045B: draw_text_2numbers 320.0 407.0 GXT 'TIME' numbers 5 45 |
+ | 07FC: text_draw_1float_position_XY 10.0 10.0 GXT_reference 'BB_05' value 1@ decimal_count 3 | ||
+ | </source> | ||
+ | где 320.0 407.0 - координаты. Координаты отсчитываются от левого верхнегно угла текста, как обычно. Следующие два опкода выводит целые числа, последний выводит Float число, параметр decimal_count - количество десятичных знаков после запятой (в GXT должно быть ~1~.~1~). | ||
− | + | К тексту можно применить форматирование, для этого перед опкодом текста должны стоять опкоды: | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | К тексту можно применить форматирование, для этого перед | + | |
− | + | ||
− | опкодом текста должны стоять опкоды: | + | |
Опкод, включающий выравнивание текста по центру: | Опкод, включающий выравнивание текста по центру: | ||
<source lang="scm">0342: enable_text_draw_centered 1</source> | <source lang="scm">0342: enable_text_draw_centered 1</source> | ||
Строка 182: | Строка 157: | ||
Цвет текста и его прозрачность: | Цвет текста и его прозрачность: | ||
<source lang="scm">0340: set_text_draw_RGBA 255 0 0 200</source> | <source lang="scm">0340: set_text_draw_RGBA 255 0 0 200</source> | ||
− | Параметры тени (первый параметр - расстояние тени, четыре | + | Параметры тени (первый параметр - расстояние тени, четыре остальных параметра - цвет и прозрачность): |
+ | <source lang="scm">060D: draw_text_shadow 1 color_RGBA 127 127 127 245</source> | ||
− | + | [[Изображение:td_shadow1.png|none|frame|Тень=1]][[Изображение:td_shadow2.png|none|frame|Тень=2]][[Изображение:td_shadow5.png|none|frame|Тень=5]] | |
− | + | ||
− | + | Параметры обводки текста (первый параметр - толщина обводки, четыре остальных параметра - цвет и прозрачность): | |
− | Параметры обводки текста (первый параметр - толщина | + | <source lang="scm">081C: draw_text_outline 1 RGBA 255 0 0 255</source> |
+ | |||
+ | [[Изображение:td_outline1.png|none|frame|Обводка=1]][[Изображение:td_outline2.png|none|frame|Обводка=2]][[Изображение:td_outline20.png|none|frame|Обводка=20]] | ||
− | |||
− | |||
Опкод, включающий серый бокс (фон) (глючный): | Опкод, включающий серый бокс (фон) (глючный): | ||
<source lang="scm">0345: enable_text_draw_background 1</source> | <source lang="scm">0345: enable_text_draw_background 1</source> | ||
− | Опкод, | + | Опкод, теоретически при 1 пропорциональный, при 0 моноширинный, практически при 0 текст выглядит безобразно: |
− | + | ||
− | моноширинный, практически при 0 текст выглядит безобразно: | + | |
<source lang="scm">0348: enable_text_draw_proportional 0</source> | <source lang="scm">0348: enable_text_draw_proportional 0</source> | ||
Опкод, задающий длину одной строки: | Опкод, задающий длину одной строки: | ||
<source lang="scm">0343: set_text_draw_linewidth 80.0 </source> | <source lang="scm">0343: set_text_draw_linewidth 80.0 </source> | ||
+ | |||
+ | [[Изображение:td_linewidthdef.png|none|frame|Длина строки по умолчанию]][[Изображение:td_linewidth300.png|none|frame|Длина строки = 300]] | ||
+ | |||
Опкод, задающий шрифт: | Опкод, задающий шрифт: | ||
<source lang="scm">0349: set_text_draw_font 3</source> | <source lang="scm">0349: set_text_draw_font 3</source> | ||
− | Параметр: 0 - готический (из San Andreas), 1 - обычный, 2 - | + | Параметр: 0 - готический (из San Andreas), 1 - обычный, 2 - шрифт из меню SA, 3 - pricedown (из GTA3). |
− | + | [[Изображение:td_font0.png|none|frame|Шрифт=0]][[Изображение:td_font1.png|none|frame|Шрифт=1]][[Изображение:td_font2.png|none|frame|Шрифт=2]][[Изображение:td_font3.png|none|frame|Шрифт=3]] | |
Опкод изменения ширины и высоты одного символа: | Опкод изменения ширины и высоты одного символа: | ||
− | <source lang="scm"> | + | <source lang="scm">033F: set_text_draw_letter_size 1.0 3.0</source> |
+ | |||
+ | Опкод, выводящий на экран прямоугольник, как и в меню: | ||
+ | <source lang="scm">0937: text_draw_box_cornerA 29.0 50.0 cornerB 210.6556 156.4957 GXT_reference 'POLICAR' style 4</source> | ||
+ | [[Изображение:Td_box1.PNG|none|frame|Результат опкода 0937]] | ||
+ | |||
Пример (вывод названия района вместо стандартного): | Пример (вывод названия района вместо стандартного): | ||
Строка 267: | Строка 248: | ||
end | end | ||
</source> | </source> | ||
+ | … | ||
− | [[Категория:GTA_SA]][[Категория:Туториалы]][[Категория:Скриптинг | + | [[Категория:GTA_SA]][[Категория:Туториалы]][[Категория:Скриптинг]] |
Текущая версия на 19:26, 13 января 2009
Чтобы рисовать на экране, нужно включить режим рисования опкодом
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 текстур.
Рисование текста
Основной опкод для рисования текста:
033E: set_draw_text_position 320.0 407.0 GXT 'FEM_YES' 045A: draw_text_1number 320.0 407.0 GXT 'DOLLAR' number 72 045B: draw_text_2numbers 320.0 407.0 GXT 'TIME' numbers 5 45 07FC: text_draw_1float_position_XY 10.0 10.0 GXT_reference 'BB_05' value 1@ decimal_count 3
где 320.0 407.0 - координаты. Координаты отсчитываются от левого верхнегно угла текста, как обычно. Следующие два опкода выводит целые числа, последний выводит Float число, параметр decimal_count - количество десятичных знаков после запятой (в GXT должно быть ~1~.~1~).
К тексту можно применить форматирование, для этого перед опкодом текста должны стоять опкоды: Опкод, включающий выравнивание текста по центру:
0342: enable_text_draw_centered 1
Опкод, включающий выравнивание текста по правому краю:
03E4: enable_text_draw_align_right 1
Цвет текста и его прозрачность:
0340: set_text_draw_RGBA 255 0 0 200
Параметры тени (первый параметр - расстояние тени, четыре остальных параметра - цвет и прозрачность):
060D: draw_text_shadow 1 color_RGBA 127 127 127 245
Параметры обводки текста (первый параметр - толщина обводки, четыре остальных параметра - цвет и прозрачность):
081C: draw_text_outline 1 RGBA 255 0 0 255
Опкод, включающий серый бокс (фон) (глючный):
0345: enable_text_draw_background 1
Опкод, теоретически при 1 пропорциональный, при 0 моноширинный, практически при 0 текст выглядит безобразно:
0348: enable_text_draw_proportional 0
Опкод, задающий длину одной строки:
0343: set_text_draw_linewidth 80.0
Опкод, задающий шрифт:
0349: set_text_draw_font 3
Параметр: 0 - готический (из San Andreas), 1 - обычный, 2 - шрифт из меню SA, 3 - pricedown (из GTA3).
Опкод изменения ширины и высоты одного символа:
033F: set_text_draw_letter_size 1.0 3.0
Опкод, выводящий на экран прямоугольник, как и в меню:
0937: text_draw_box_cornerA 29.0 50.0 cornerB 210.6556 156.4957 GXT_reference 'POLICAR' style 4
Пример (вывод названия района вместо стандартного):
{$CLEO}
var
$PLAYER_CHAR: Player
$PLAYER_ACTOR: Actor
1@: Float
2@: Float
3@: Float
// 20@s: String
// 22@s: String
end
0000:
09BA: show_entered_zone_name 0
while true
$PLAYER_ACTOR.StorePos(1@, 2@, 3@)
0843: get_zone_at 1@ 2@ 3@ nameA_to 22@s // 8-byte string
if not 20@s == 22@s
then
03F0: enable_text_draw 1
4@ = 447.0
while 4@ > 407.0
03F0: enable_text_draw 1
060D: draw_text_shadow 0 color_RGBA 0 0 0 0
0345: enable_text_draw_background 0
0342: enable_text_draw_centered 1
033F: set_text_draw_letter_size 1.0 3.0
033E: set_draw_text_position 320.0 4@ GXT 22@s
4@-=1.0
wait 0
end
32@ = 0
while 32@ < 2000
03F0: enable_text_draw 1
060D: draw_text_shadow 0 color_RGBA 0 0 0 0
0345: enable_text_draw_background 0
0342: enable_text_draw_centered 1
033F: set_text_draw_letter_size 1.0 3.0
033E: set_draw_text_position 320.0 407.0 GXT 22@s
wait 0
end
4@ = 407.0
while 4@ < 447.0
03F0: enable_text_draw 1
060D: draw_text_shadow 0 color_RGBA 0 0 0 0
0345: enable_text_draw_background 0
0342: enable_text_draw_centered 1
033F: set_text_draw_letter_size 1.0 3.0
033E: set_draw_text_position 320.0 4@ GXT 22@s
4@+=1.0
wait 0
end
end
0843: get_zone_at 1@ 2@ 3@ nameA_to 20@s // 8-byte string
wait 0
end
…