Сегодня я расскажу, как сделать свой HUD с текстуркой. И так приступим, откроем клиентскую часть и создадим новый cpp например hud_mail.cpp Для начала: #include "cbase.h"
#include "hudelement.h"
#include "hud_macros.h"
#include "iclientmode.h"
#include "view.h"
#include
#include
#include
#include
#include
#include "tier0/memdbgon.h"
Ну, тут вроде всё понятно? Далее описываем класс: class CHudInfo : public CHudElement, public vgui::Panel
{
DECLARE_CLASS_SIMPLE( CHudInfo, vgui::Panel );
public:
CHudInfo( const char *pElementName );
virtual void Paint();
private:
int m_nTextureID;
};
DECLARE_HUDELEMENT( CHudInfo );
Чтобы просто была текстурка нам достаточно всего одной функции paint();
Далее: CHudInfo::CHudInfo( const char *pElementName ) : CHudElement( pElementName ), BaseClass(NULL, "InfoROD")
{
vgui::Panel *pParent = g_pClientMode->GetViewport();
SetParent( pParent );
m_nTextureID = vgui::surface()->CreateNewTextureID();
vgui::surface()->DrawSetTextureFile( m_nTextureID, "sprites/mail" , true, false);
SetHiddenBits( HIDEHUD_PLAYERDEAD );
}
Собственно vgui::surface()->DrawSetTextureFile( m_nTextureID, "sprites/mail" , true, false); тут пишем путь к своему спрайту. SetHiddenBits( HIDEHUD_PLAYERDEAD ); Здесь говорится, что нужно убрать этот HUD с экрана только тогда, когда игрок умрёт. BaseClass(NULL, "InfoROD") Тут важная штука... по ней мы будем хранить информацию о HuD. Так с этим всё ок вроде... Далее сама функция paint()
void CHudInfo::Paint( void )
{
vgui::surface()->DrawSetTexture( m_nTextureID );
vgui::surface()->DrawTexturedRect( 0, 0, 50, 30 );
}
Где vgui::surface()->DrawTexturedRect это размеры спрайта. Всё с кодом закончили, теперь можно смело компилировать. Далее нам нужно создать спрайт. Vmt файл для текстуры спрайта должен быть такой: "Sprite"
{
"$spriteorientation" "vp_parallel"
"$spriteorigin" "[ 0.50 0.50 ]"
"$ignorez" 1
"$baseTexture" "sprites/mail"
}
Так тут вроде всё понятно. Далее нужно добавить информацию о спрайте в файл HudLayout.res. Итак открываем его (scripts\HudLayout.res) и добавляем:
Как выглядит спрайт в игре (конверт на экране слева)
InfoROD { "fieldName" "HudInfo" "visible" "1" "enabled" "1" // активирован или нет "xpos" "16" // положение по x "ypos" "200" // положение по y "wide" "50" "tall" "30"
"PaintBackgroundType" "0" }
Всё. Теперь всё сохраняем и запускаем игру и вуаля... Здесь я описал базовое создание, потом можно его анимировать, подключать event и т.п 10x
Источник: http://wiki.hl2.ru/index.php?title=HUD_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE_%D0%B8_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%BD% |