Гайд API SF | Урок 3 - Render

Статус
В этой теме нельзя размещать новые ответы.

CleanLegend

Известный
Автор темы
Всефорумный модератор
474
927
Введение
Я не буду рассказывать в этой статье, что такое 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
 
Статус
В этой теме нельзя размещать новые ответы.