Рисование на экране — различия между версиями

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

все параметры те же, что у текстур, только нет номера текстуры.

Пример рисования (прыгающий шарик):

  1. thread 'ball'
  2.  
  3. {$CLEO}
  4.  
  5. var
  6.   $PLAYER_CHAR: Player
  7.   $PLAYER_ACTOR: Actor
  8.   1@: Float
  9.   2@: Float
  10.   3@: Float
  11.   4@: Float
  12.   5@: Float
  13. end
  14.  
  15. const
  16.   BALL_SPEED = 5.0
  17. end
  18.  
  19. while true
  20.   if and
  21.     $PLAYER_CHAR.Defined
  22.     $PLAYER_CHAR.Controllable
  23.     $ONMISSION == false
  24.     not $PLAYER_ACTOR.Driving
  25.     00E1: pad 0 pressed_key 4 // клавиша Действие
  26.   then
  27.     0390: load_txd_dictionary 'LD_DUAL'
  28.     038F: load_texture "light" as 1
  29.     03f0: enable_text_draw 1
  30.     $PLAYER_CHAR.CanMove = false
  31.     $ONMISSION = true
  32.     1@ = 320.0 // Установка начальных координат
  33.     2@ = 224.0 //
  34.     3@ = Random(0.0, 360.0) // Устанавливается случайных угол
  35.     02F6: 4@ = cosine 3@    // Разложение скорости по оси X
  36.     4@ *= BALL_SPEED        //
  37.     02F7: 5@ = sine 3@      // Разложение скорости по оси Y
  38.     5@ *= BALL_SPEED        //
  39.     while 80E1: not pad 0 pressed_key 15 // клавиша Вход/Выход
  40.       if or       
  41.         1@ <= 0.0
  42.         1@ >= 640.0
  43.       then          // Если Vx выходит за границы, то
  44.         4@ *= -1.0  // обратим скорость по X 
  45.         jump @A
  46.       end     
  47.       if or
  48.         2@ <= 0.0
  49.         2@ >= 447.0
  50.       then          // Если Vy выходит за границы, то
  51.         5@ *= -1.0  // обратим скорость по Y 
  52.         jump @A
  53.       end    
  54.       :A
  55.       1@+=4@
  56.       2@+=5@
  57.       03f0: enable_text_draw 1
  58.       03E3: set_texture_to_be_drawn_antialiased 1 
  59.       038D: draw_texture 1 position 1@ 2@ scale 25.0 25.0 RGBA 255 255 255 255 
  60.       wait 0
  61.     end
  62.     $ONMISSION = false
  63.     $PLAYER_CHAR.CanMove = true
  64.     03f0: enable_text_draw 0
  65.     0391: release_txd_dictionary
  66.   end
  67.   wait 0
  68. end
  69. 0A93: end_custom_thread

Ограничения: всего в один момент времени на экран может выводиться до 128 текстур.

Рисование текста

В скором времени будет