Урок:
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