HLFX.Ru Forum
Показать все 29 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Вопрос по картинкам во VGUI (https://hlfx.ru/forum/showthread.php?threadid=4805)


Отправлено Shadow762 16-07-2016 в 10:47:

Вопрос по картинкам во VGUI

Собственно, хотел в свой мод добавить такую штуку: В мэпбрифинге рядом с описанием карты чтобы был скриншотик. Написал такой вот код:

C++ Source Code:
1
if (gEngfuncs.pfnGetLevelName() == "map1")
2
  plab->setImage(vgui_LoadTGA("maps/map1.tga"));
3
else if (gEngfuncs.pfnGetLevelName() == "map2")
4
  plab->setImage(vgui_LoadTGA("maps/map2.tga"));
5
else if (gEngfuncs.pfnGetLevelName() == "map3")
6
  plab->setImage(vgui_LoadTGA("maps/map3.tga"));
7
else
8
  plab->setImage(vgui_LoadTGA("maps/zero.tga"));

Далее само собой разумеется разметка типа размера и расположения но это не важно. В общем, проблема в том что всегда высвечивается картинка из условия else. Почему так - не могу понять.

__________________
Fight for Peace, Fight for Love


Отправлено XaeroX 16-07-2016 в 11:06:

Shadow762 кто тебя так учил строки в си сравнивать?

__________________

xaerox on Vivino


Отправлено Shadow762 16-07-2016 в 11:10:

XaeroX, Никто, я с ними не умею работать) Будь добр, покажи как в конкретном случае правильно сделать

__________________
Fight for Peace, Fight for Love


Отправлено XaeroX 16-07-2016 в 11:34:

Shadow762
Ну в самом SDK мало примеров, что ли?
Смотри функции strcmp/_stricmp.
Твой код сравнивает не строки, а адреса, которые, разумеется, разные.

__________________

xaerox on Vivino


Отправлено ~ X ~ 16-07-2016 в 11:54:

Кстати, никто не запилил ещё загрузку BMP-файлов в VGUI?
Я начал писать стаб, но это велосипедное чувство меня задавило....

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Shadow762 16-07-2016 в 14:03:

В общем сделал с strcmp, убрал else ради эксперимента, теперь грузится на всех картах картинка третей. когда третью карту переименовал, не грузится никакая картинка. Я по-прежнему не знаю как довести до ума это(

Добавлено 16-07-2016 в 17:03:

вот код:

C++ Source Code:
1
if (!strcmp (gEngfuncs.pfnGetLevelName(), "map1")==0)
2
  plab->setImage(vgui_LoadTGA("maps/map1.tga"));
3
if (strcmp (gEngfuncs.pfnGetLevelName(), "map2")==0)
4
  plab->setImage(vgui_LoadTGA("maps/map2.tga"));
5
if (!strcmp (gEngfuncs.pfnGetLevelName(), "map3")==0)
6
  plab->setImage(vgui_LoadTGA("maps/map3.tga"));

__________________
Fight for Peace, Fight for Love


Отправлено XaeroX 16-07-2016 в 14:40:

Shadow762
Копай в сторону функции strcmp. А именно, как правильно её использовать. Примеров вагон, в том числе в SDK.
Хотя я бы рекомендовал использовать _stricmp, т.к. емнип, в халфе имена карт не чувствительны к регистру.

Добавлено 16-07-2016 в 20:40:

Цитата:
Shadow762 писал:
if (!strcmp (gEngfuncs.pfnGetLevelName(), "map1")==0)

Зачем тут восклицательный знак?

__________________

xaerox on Vivino


Отправлено ~ X ~ 16-07-2016 в 15:33:

Цитата:
XaeroX писал:
Хотя я бы рекомендовал использовать _stricmp

не учи человека плохим вещам! А то потом будешь радоваться высерами типа "dM_aRKANOs.tXT" в архивах с крутыми картами.

Shadow762 зачем проверять имя карты на "map2", если уже известно, что оно "map1"?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 16-07-2016 в 15:50:

Цитата:
~ X ~ писал:
не учи человека плохим вещам!

Я учу людей только тому, что делаю сам.
Case sensitivity в игровых движках - зло.

__________________

xaerox on Vivino


Отправлено Shadow762 16-07-2016 в 16:06:

Цитата:
~ X ~ писал:
Shadow762 зачем проверять имя карты на "map2", если уже известно, что оно "map1"? [/B]
так надо. Во вгуе каждой карте свой скриншотик. Если бы хотел всем один и тот же влепить, я бы сюда не обращался.

Добавлено 16-07-2016 в 19:06:

XaeroX
Цитата:

Зачем тут восклицательный знак?
без него пустое место) картинка не выводится. Я просто экспериментировал.

__________________
Fight for Peace, Fight for Love


Отправлено XaeroX 16-07-2016 в 17:01:

Цитата:
Shadow762 писал:
Я просто экспериментировал.

Ну так экспериментируй дальше, чего ты так быстро сдаёшься.

__________________

xaerox on Vivino


Отправлено Shadow762 16-07-2016 в 17:14:

Цитата:
XaeroX писал:
Ну так экспериментируй дальше, чего ты так быстро сдаёшься.
ценю твое чувство юмора, но проблему это не решает. Лучше скажи как эту фишку правильно реализовать)

__________________
Fight for Peace, Fight for Love


Отправлено XaeroX 16-07-2016 в 17:15:

Цитата:
Shadow762 писал:
ценю твое чувство юмора

Я не шучу. Если ты ленишься почитать учебник по Си, или хотя бы тупо загуглить, и предпочитаешь экспериментировать - экспериментируй! Я могу дать тебе рабочий код, но какой в этом смысл, если ты не желаешь учиться. Таким образом, время будет потрачено зря.
Ты можешь возразить - но ведь на написание всех этих постов времени ушло в разы больше? Верно. Но я пишу их один раз, а отвечать на вопросы не желающего учиться человека потом придётся постоянно. Теперь же ты, возможно, задумаешься и таки откроешь учебник. Или - как вариант - обругаешь меня про себя плохими словами и пойдёшь спрашивать на другой ресурс. Оба варианта ок.

__________________

xaerox on Vivino


Отправлено Shadow762 16-07-2016 в 17:58:

Цитата:
XaeroX писал:
обругаешь меня про себя плохими словами и пойдёшь спрашивать на другой ресурс

Не вижу в этом никакого смысла. За рабочий код буду благодарен. А на счет новичка, который будет иждивенчески требовать код от опытных, я не из таких. На форум я иду когда уже не вижу никаких вариантов решения проблемы. До этого запилил массу фишек, быть может не совсем оригинальных, но тем не менее не копипастой. Врать не стану, частенько ссылался на здешние туторы.

Вернусь к теме.
C++ Source Code:
if (!strcmp (gEngfuncs.pfnGetLevelName(), "map1")==0)
  plab->setImage(vgui_LoadTGA("maps/map1.tga"));
. Вначале я сделал ровно так как ты сказал - с функцией strcmp: прочитал про функцию, применил ее как следует. В итоге на месте картинки я получил пустоту. Подумал, ну может что сотворил там не так, продолжил гуглить, на каком-то сайте нашел вариант с отрицанием ("!"), подставил, появилась ТГАшка, та что после первого условия, то есть которая для первой карты. _stricmp тоже не дает результатов.

Добавлено 16-07-2016 в 20:58:

Насколько я понимаю, gEngfuncs.pfnGetLevelName возвращает название уровня не в том виде.
C++ Source Code:
f (strcmp (gEngfuncs.pfnGetLevelName(), "map1")==0)
plab->setImage(vgui_LoadTGA("maps/map1.tga"));
Иначе бы работало.

__________________
Fight for Peace, Fight for Love


Отправлено ~ X ~ 16-07-2016 в 18:45:

Цитата:
XaeroX писал:
Case sensitivity

Добро везде и всегда.

Shadow762 ф-я возвращает то ли число разных знаков, то ли позицию, вощем, если это 0, то строки одинаковые. Конструкция if (strcmp(szString, "WTF") == 0) {} как раз это проверяет и код в фиг. скобках выполнится, когда таки строки совпадут. Конструкция if (!strcmp(szString, "WTF")) {} менее очевидная/грамотная, но, по сути, делает то же самое поскольку "!" - логический оператор "не" (т.е. инвертирует 0 в 1 и обратно). Когда ты пишешь всё вкучу, "не" нейтрализует твоё условие.

Вообще, не скрою, я сам учил Си по халве. Но ЭТО... можно просечь своей головой даже без учебников...

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 16-07-2016 в 18:50:

Цитата:
Shadow762 писал:
прочитал про функцию, применил ее как следует

Но если ты применил её как следует - почему же не работает?
Почему ты не прочитал ещё раз всё заново? Не рассмотрел внимательно свой код? Я даже наводящий вопрос задал - а ты в ответ про какие-то эксперименты.
Цитата:
Shadow762 писал:
на каком-то сайте нашел вариант с отрицанием

Твоя фраза свидетельствует о том, что ты плаваешь в самых азах языка. В самых основах. Тебе самому это норм?

__________________

xaerox on Vivino


Отправлено Shadow762 16-07-2016 в 18:51:

Цитата:
~ X ~ писал:
Вообще, не скрою, я сам учил Си по халве. Но ЭТО... можно просечь своей головой даже без учебников... [/B]
Уже просек. но черт возьми, когда уже в лоб пишу что если название карты такое-то, то вывести такую-то ТГА-шку, и ничего не выводится, я просто не знаю что уже с этим делать. Народ, прошу вас, пожалуйста, поделитесь кодом.

__________________
Fight for Peace, Fight for Love


Отправлено XaeroX 16-07-2016 в 18:52:

Цитата:
Shadow762 писал:
когда уже в лоб пишу что если название карты такое-то, то вывести такую-то ТГА-шку, и ничего не выводится, я просто не знаю что уже с этим делать

А ты уверен, что проблема только в этом коде?
Может, ты что-то ещё не так делаешь?
Тебе уже прямым текстом написали - убери восклицательные знаки!

__________________

xaerox on Vivino


Отправлено Shadow762 16-07-2016 в 18:57:

Цитата:
XaeroX писал:
А ты уверен, что проблема только в этом коде?
Может, ты что-то ещё не так делаешь?
Тебе уже прямым текстом написали - убери восклицательные знаки!
Сделал это уже давным давно. И ранее я писал, что результата это не дает.

P.S, попробовал сделать вот так:
C++ Source Code:
gEngfuncs.pfnGetLevelName();
plab->setImage(vgui_LoadTGA("maps/%s.tga"));
- опять-таки по нулям

__________________
Fight for Peace, Fight for Love


Отправлено PLut 16-07-2016 в 19:09:

Shadow762 Почему бы не вывести значение pfnGetLevelName в консоль и не посмотреть в каком виде сравнивать?

C++ Source Code:
gEngfuncs.Con_Printf("Current map: %s\n", gEngfuncs.pfnGetLevelName());

__________________
Base Defense on Steam, ModDB


Отправлено Shadow762 16-07-2016 в 19:28:

PLut Спасибо за совет
Так, ну, вид вот такой: maps/map1.bsp . Так и сравнивал. Все равно, по нулям.

C++ Source Code:
if (strcmp (gEngfuncs.pfnGetLevelName(), "maps/map1.bsp")==0)
  plab->setImage(vgui_LoadTGA("maps/map1.tga"))

__________________
Fight for Peace, Fight for Love


Отправлено PLut 16-07-2016 в 19:40:

Shadow762 Может тогда утащишь брифинги из паранойи? Раз пока сам не можешь осилить... И почитай туториал BUzer'a по VGUI.

__________________
Base Defense on Steam, ModDB


Отправлено Shadow762 16-07-2016 в 19:44:

Цитата:
PLut писал:
Shadow762 Может тогда утащишь брифинги из паранойи? Раз пока сам не можешь осилить... И почитай туториал BUzer'a по VGUI.
Попробуем. И.. можно ссылочку на тутор?

__________________
Fight for Peace, Fight for Love


Отправлено PLut 16-07-2016 в 20:10:

VGUI — концепция интерфейса и структура его компонентов.

__________________
Base Defense on Steam, ModDB


Отправлено Shadow762 16-07-2016 в 20:23:

В общем сделал я что хотел. Пристроил в тот же бок где меняется заголовок мэпбрифинга в зависимости от карты. Тему можно закрывать, всем спасибо.

__________________
Fight for Peace, Fight for Love


Отправлено PLut 16-07-2016 в 20:26:

Shadow762 Покажи, хоть, код.

__________________
Base Defense on Steam, ModDB


Отправлено ~ X ~ 16-07-2016 в 21:27:

Цитата:
PLut писал:
VGUI — концепция интерфейса и структура его компонентов.

Ого... почти небыдлокод от BUzer'а, в 2005 году! 0_0

Цитата:
PLut писал:
Shadow762 Покажи, хоть, код.

++

У меня есть нехитрое подозрение, что ему вместо сравнения нужно подгружать mapname.tga для каждой карты.... но там уже адвансед-работа со строками, переполнения буферов, переполнения движков... быррр!

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено PLut 17-07-2016 в 07:23:

~ X ~ Да, я к тому, что я очень давно грузил картинки из функции, которая вызывается каждый кадр. Так вот, на диспетчер задач можно было смотреть как на костёр, процесс hl.exe постепенно съедал всю память.

__________________
Base Defense on Steam, ModDB


Отправлено pRoxxx 19-07-2016 в 13:02:

Цитата:
Shadow762 писал:
PLut Спасибо за совет
Так, ну, вид вот такой: maps/map1.bsp . Так и сравнивал. Все равно, по нулям.
C++ Source Code:
if (strcmp (gEngfuncs.pfnGetLevelName(), "maps/map1.bsp")==0)
  plab->setImage(vgui_LoadTGA("maps/map1.tga"))

if (strcmp (gEngfuncs.pfnGetLevelName(), "maps\\map1.bsp")==0)
Так пробуй.


Временная зона GMT. Текущее время 22:48.
Показать все 29 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024