HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 08.08.2018, 12:42
CleanLegend
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами: 6908018

Репутация: 213
По умолчанию

Введение

Я не буду рассказывать в этой статье, что такое 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
 
Ответить с цитированием
 



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.