ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   API SF | Урок 3 - Render (https://forum.antichat.xyz/showthread.php?t=1323412)

CleanLegend 08.08.2018 12:42

Введение

Я не буду рассказывать в этой статье, что такое DirectX, D3DDevice и прочее, что Вы можете прочитать в Интернете самостоятельно. Я лишь покажу, как пользоваться готовыми функциями для рисования несложных объектов на экране игры.

Начало работы

Для начала Вам надо запомнить, что всё рисуется исключительно в callback-функции Present.

Откройте исходник плагина, с которым работали в предыдущих двух уроках, и вставьте эту функцию перед определением mainloop:

C++:





Код:

bool
CALLBACK Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
// если рендерер готов к рисованию
{
// рисуем
SF
->
getRender
(
)
->
EndRender
(
)
;
// завершаем рисование
}
;
return
true
;
// возвращаем положительный результат
}
;



Затем регистрируем этот callback внутри условного блока if( !init ):

C++:





Код:

SF
->
getRender
(
)
->
registerD3DCallback
(
eDirect3DDeviceMethods
::
D3DMETHOD_PRESENT
,
Present
)
;



Покажу простой пример рисования квадрата:

Там, где помечен комментарий "рисуем", вставляем код:

C++:





Код:

SF
->
getRender
(
)
->
DrawBox
(
500
,
500
,
25
,
25
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
0
)
)
;



Получаем зелёный квадрат в координатах 500:500, размерами 25x25 и зелёным цветом.

Цитата:

Сообщение от Спойлер

Теперь покажу рисование текста.

Объявляем глобальный указатель на шрифт:

C++:





Код:

stFontInfo
*
pFont
;
//Затем один раз инициализируем шрифт:
pFont
=
SF
->
getRender
(
)
->
CreateNewFont
(
"Tahoma"
,
12
,
FCR_BORDER
)
;
//Рисуем в callback-функции Present:
pFont
->
Print
(
"текст"
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
500
,
500
,
false
)
;



Получаем:

Цитата:

Сообщение от Спойлер

Рисование текстуры:

Объявляем глобальный указатель на текстуру:

C++:





Код:

stTextureInfo
*
pTexture
;
//Инициализируем:
pTexture
=
SF
->
getRender
(
)
->
LoadTextureFromFile
(
"SAMPFUNCS\\image.png"
)
;
//Рисуем:
SF
->
getRender
(
)
->
DrawTexture
(
pTexture
,
500
,
500
,
pTexture
->
imgInfo
.
Width
,
pTexture
->
imgInfo
.
Height
,
0
,
-
1
)
;



Получаем:

Цитата:

Сообщение от Спойлер

Также текстуры можно загружать из ресурса и буфера, но об этом в другой раз.

Рисование геометрических фигур:

C++:





Код:

SF
->
getRender
(
)
->
DrawPolygon
(
500
,
500
,
50
,
50
,
0
,
5
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
255
)
)
;



Рисует пятиугольник в координатах 500:500, с нулевым углом поворота, синим цветом и размерами 50x50:

Цитата:

Сообщение от Спойлер

Остальные функции будут описаны в следующей части урока.

Автор: urShadow


Время: 23:44