Введение
Я не буду рассказывать в этой статье, что такое DirectX, D3DDevice и прочее, что Вы можете прочитать в Интернете самостоятельно. Я лишь покажу, как пользоваться готовыми функциями для рисования несложных объектов на экране игры.
Начало работы
Для начала Вам надо запомнить, что всё рисуется исключительно в callback-функции Present.
Откройте исходник плагина, с которым работали в предыдущих двух уроках, и вставьте эту функцию перед определением mainloop:
Затем регистрируем этот callback внутри условного блока if( !init ):
Покажу простой пример рисования квадрата:
Там, где помечен комментарий "рисуем", вставляем код:
Получаем зелёный квадрат в координатах 500:500, размерами 25x25 и зелёным цветом.
Теперь покажу рисование текста.
Объявляем глобальный указатель на шрифт:
Получаем:
Рисование текстуры:
Объявляем глобальный указатель на текстуру:
Получаем:
Также текстуры можно загружать из ресурса и буфера, но об этом в другой раз.
Рисование геометрических фигур:
Рисует пятиугольник в координатах 500:500, с нулевым углом поворота, синим цветом и размерами 50x50:
Остальные функции будут описаны в следующей части урока.
Автор: urShadow
Я не буду рассказывать в этой статье, что такое 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; // возвращаем положительный результат
};
C++:
SF->getRender()->registerD3DCallback( eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present );
Там, где помечен комментарий "рисуем", вставляем код:
C++:
SF->getRender()->DrawBox( 500, 500, 25, 25, D3DCOLOR_ARGB( 255, 0, 255, 0 ) );
Теперь покажу рисование текста.
Объявляем глобальный указатель на шрифт:
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 ) );
Остальные функции будут описаны в следующей части урока.
Автор: urShadow