Урок:
API SF | Урок 3 - Render


API SF | Урок 3 - Render

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

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

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

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 ):

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

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

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

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

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

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

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

stFontInfo *pFont;

Затем один раз инициализируем шрифт:

pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER );

Рисуем в callback-функции Present:

pFont->Print( "текст", D3DCOLOR_ARGB( 255, 255, 255, 0 ), 500, 500, false );

Получаем:

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

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

stTextureInfo *pTexture;

Инициализируем:

pTexture = SF->getRender()->LoadTextureFromFile( "SAMPFUNCS\\image.png" );

Рисуем:

SF->getRender()->DrawTexture( pTexture, 500, 500, pTexture->imgInfo.Width, pTexture->imgInfo.Height, 0, -1 );

Получаем:

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

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

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

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


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

by urShadow