Рисование на экране
Материал из GTAModding.ru
Версия от 08:27, 24 декабря 2008; Seemann (обсуждение | вклад)
Чтобы рисовать на экране, нужно включить режим рисования опкодом
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 текстур.
Рисование текста
В скором времени будет