PDA

Просмотр полной версии : API SF | Урок 3 - Render


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 и зелёным цветом.



https://blast.hk/wiki/_media/tutorials:5bb452be6115621b22f99f5ebc516d03.png (https://blast.hk/wiki/_detail/tutorials:5bb452be6115621b22f99f5ebc516d03.png?id= tutorials%3Aapi_lesson_render)



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

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

C++:






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




Получаем:



https://blast.hk/wiki/_media/tutorials:002d9024ac48c726353aa2088df9056d.png (https://blast.hk/wiki/_detail/tutorials:002d9024ac48c726353aa2088df9056d.png?id= tutorials%3Aapi_lesson_render)

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

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

C++:






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




Получаем:



https://blast.hk/wiki/_media/tutorials:058d8e1009685c35135fae478f65426f.png (https://blast.hk/wiki/_detail/tutorials:058d8e1009685c35135fae478f65426f.png?id= tutorials%3Aapi_lesson_render)



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

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

C++:






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




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



https://blast.hk/wiki/_media/tutorials:a7d20feb736e2305b001c2c2c0875f08.png (https://blast.hk/wiki/_detail/tutorials:a7d20feb736e2305b001c2c2c0875f08.png?id= tutorials%3Aapi_lesson_render)



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

Автор: urShadow