HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нуб вопросы Superuser8 (https://hlfx.ru/forum/showthread.php?threadid=4561)
Отправлено ***FantoM*** 23-03-2015 в 23:26:
Superuser8
как было ?
Добавлено 24-03-2015 в 05:26:
если да то вот
if (gHUD.m_iWeaponBits & (1<<(WEAPON_SUIT)))
{
HealthWidth = gHUD.GetSpriteRect(gHUD.m_HUD_number_0).right - gHUD.GetSpriteRect(gHUD.m_HUD_number_0).left;
int CrossWidth = gHUD.GetSpriteRect(m_HUD_cross).right - gHUD.GetSpriteRect(m_HUD_cross).left;
y = ScreenHeight - gHUD.m_iFontHeight - gHUD.m_iFontHeight / 2;
x = CrossWidth /2;
SPR_Set(gHUD.GetSprite(m_HUD_cross), r, g, b);
SPR_DrawAdditive(0, x, y, &gHUD.GetSpriteRect(m_HUD_cross));
x = CrossWidth + HealthWidth / 2;
x = gHUD.DrawHudNumber(x, y, DHN_3DIGITS | DHN_DRAWZERO, m_iHealth, r, g, b);
x += HealthWidth/2;
int iHeight = gHUD.m_iFontHeight;
int iWidth = HealthWidth/10;
FillRGBA(x, y, iWidth, iHeight, 255, 160, 0, a);
}
Отправлено Superuser8 23-03-2015 в 23:30:
***FantoM*** спасибо конечно, но оригиналы исходников есть и у меня
Меня больше интересуют ошибки в моём коде
Отправлено ***FantoM*** 24-03-2015 в 00:04:
Superuser8
сделай как в Paranoia
Отправлено Superuser8 24-03-2015 в 00:10:
***FantoM*** что сделать?
Отправлено ***FantoM*** 24-03-2015 в 01:12:
броню и жизни как в Paranoia
Отправлено Superuser8 24-03-2015 в 04:42:
***FantoM*** зачем мне делать броню и жизни как в Paranoia?
Меня стандартный hud устраивает 
Отправлено ***FantoM*** 24-03-2015 в 04:48:
Цитата:
Superuser8 писал:
Меня больше интересуют ошибки в моём коде
какие ошибки ?
Отправлено Superuser8 24-03-2015 в 15:04:
Почему hud на разных разрешениях ведёт себя по разному? И можно ли это исправить?
P.S на разрешении 640x480 элементы hud находятся в правильной позиции
Хочу чтобы и на остальных разрешениях было так же

Отправлено XaeroX 24-03-2015 в 15:09:
Потому что спрайты не масштабируются под разрешение (ограничение софтварного рендера).
Отправлено Ku2zoff 24-03-2015 в 18:12:
Цитата:
Superuser8 писал:
Почему hud на разных разрешениях ведёт себя по разному?
XaeroX ответил на этот вопрос. Есть два (а может три) варианта решения. Первый лёгкий и частично исправляет ситуацию, а второй сложный, но HUD будет на всех разрешениях одинаковый.
1. Использовать ScreenWidth/ScreenHeight для указания координат и размеров. Элементы худа не будут сильно съезжать со своих позиций на разных разрешениях, но спрайты всё равно не масштабируются.
2. Сделать худ на VGUI, как в паранойе. Придётся нарисовать ТГА-картинки разного размера для нескольких базовых разрешений, но зато всё будет выглядеть одинаково хоть при 640x480, хоть при 1920x1080.
3. [просто предположение] Написать функцию рисования спрайтов с масштабированием (в зависимости от разрешения), основываясь на TriAPI. В этом случае я бы сначала перерисовал спрайты покрупнее, чтобы они не растягивались до ужасных пикселей на высоких разрешениях. А масштабирование для уменьшения их при более низком разрешении будет выглядеть не так убого.
Отправлено XaeroX 24-03-2015 в 18:56:
Ku2zoff
Вариант 2 легко распространяется на вариант 1 - вместо тга-картинок рисуем спрайты под каждое разрешение. И заодно с софтваром прекрасно совместимо.
А п.3 с софтваром не совместим категорически - там не работает триапи в 2д (столкнулся с этим, когда делал всплывающие цифры очков в хеткрап френзе).
Отправлено Ku2zoff 25-03-2015 в 02:56:
XaeroX про спрайты для каждого разрешения правда не подумал...
А пункт 3 мне всё-таки более симпатичен. Я сам в софтваре не играю, и не думаю, что играющих в нём большой процент. В конце концов, можно для софтвара сделать хаки. Чтобы элементы не съезжали и не перекрывали друг друга.
Отправлено Superuser8 26-03-2015 в 10:17:
Господа! Чем отличается такая конструкция
C++ Source Code:
1 | switch ( RANDOM_LONG( 0, 1 ) ) |
От такой?
C++ Source Code:
4 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + (70.0/30.0); |
9 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + (60.0/30.0); |
11 | else if (flRand <= 0.9) |
14 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + (88.0/30.0); |
18 | iAnim = PYTHON_FIDGET; |
19 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + (170.0/30.0); |
ведь по сути и там и там выбор idle анимации
Отправлено Ku2zoff 26-03-2015 в 10:50:
Superuser8 во второй конструкции тупо больше анимаций. Первый вариант предпочтительнее, если выбор делается из 2-3х анимаций, а второй - когда из большего количества.
Отправлено XaeroX 26-03-2015 в 11:57:
Superuser8 отличие в том, что в операторе switch может быть только целочисленное выражение, а во втором случае float.