Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

GLScene как сделать консоль!! [Delphi, Windows]


Страницы:   1 2

FRick ©   (2004-05-31 13:32:00) 

Во многих играх при нажатие на '~' вылазиет командная строка  
гне можно вести код, кто знает помогите!!


NailMan   (2004-05-31 18:30:00) [21]

Во первых пример моей консоли мжно посмотреть в моей демке на моем сайте(2.5Мб, D3D9): www.cyborghome.ru/nailman в разделе Качалка.


> И ещё такая есть штука ввёл значит ты букву 'g' и нажал
> клавищу
> 'Tab' и при каждом нажатие у тебя промелькают слова консоли
> на букву 'g' как такое заюзать!!

Я делаю так:

делаю несколько файлов(в демке они упакованы в ресурс моего формата), в которых записываю следующее(пример):

файл allcmdvar.ini(файл содержит имена всех команд и переменных)
DEV_COORDS
R_RENDERTYPE
GOD
SUMMON
DEV_FPS
HELP
...

Остальные файлы содержат отдельно команды и отдельно переменные. Эти файлы нужны для вывода в консоль по командам cmdlist и cvarlist соотвественно.

Когда создается консоль я гружу этот текстовый файл в TStringList(точнее мой собственный аналог этого класса).

Когда юзер жмет таб и командная строка не пуста, я делаю так:

Procedure TUTGameConsole.ShowContextCommands(CX:String);
var i,z,B:integer;p:string;
begin
cx:=uppercase(cx);
z:=0;b:=0;
For i:=0 to ALLList.Count-1 do
 begin
  p:=copy(ALLList.Strings[i],1,length(CX));
  if pos(cx,p)<>0 then begin inc(z);b:=i;end;
 end;
if z=1 then begin cmd:='> '+ALLList.Strings[b]+' '; exit;end;

if z>1 then History.Add(GetCmdDesc('Avail_Cmd_for_prefix')+cx);

For i:=0 to ALLList.Count-1 do
 begin
  p:=copy(ALLList.Strings[i],1,length(CX));
  if pos(cx,p)<>0 then History.Add('   '+ALLList.Strings[i]);
 end;
end;


Т.е. общем листе переменных и команд ищется все строки содержащие введенные символы в командной строке. Они-то и добавляются в консоль списком.
Если строка(команда или переменная) с таким началом одна, то она дополняется до полного вида.

Все просто и тупо. Никаких извратов. Данные с клавы я беру директинпутом через немерянную функцию анализа введенной клавиши(включая рус/lat и шифт).


> Мне имено надо заморочится с графикой!
> А так я уже делал только выглядит это неочень красиво!

Все зависит от фантазии и умения пользоваться АПИ. В директе это делается очень просто, а как в обертках OGL не знаю. Наверно также -  делается квад в экранных коодинатах и натягивается текстура или как у меня просто зеленого полупрозрачного цвета.

---
WBR, NailMan aka 2:5020/3337.13


FRick   (2004-05-31 17:40:00) [22]

И ещё такая есть штука ввёл значит ты букву 'g' и нажал клавищу
'Tab' и при каждом нажатие у тебя промелькают слова консоли
на букву 'g' как такое заюзать!!


FRick   (2004-05-31 17:24:00) [23]

Вот конкретный вопрос: например я запишу все команды в
console.ini  в Stalker'е это так:

ai_dbg_brain off
ai_dbg_frustum off
ai_dbg_motion off
ai_debug off
unbindall
bind quit kESCAPE
bind wpn_1 k1
bind wpn_2 k2
bind wpn_3 k3
bind wpn_4 k4
bind wpn_5 k5
bind wpn_6 k6
bind wpn_7 k7
bind wpn_8 k8
bind wpn_9 k9
bind scores kTAB
bind wpn_next kQ
bind forward kW
bind use kE
bind wpn_reload kR
bind lstrafe kA
bind back kS
bind rstrafe kD
bind accel kLSHIFT
bind crouch kC
bind jump kSPACE
bind cam_1 kF1
bind cam_2 kF2
bind cam_3 kF3
bind cam_4 kF4
bind cam_zoom_out kSUBTRACT
bind cam_zoom_in kADD
bind screenshot kF12
bind up kUP
bind left kLEFT
bind right kRIGHT
bind down kDOWN
bind wpn_fire mouse1
bind wpn_zoom mouse2
cam_inert 1.00000
cam_slide_inert 0.00000
cl_act_depth 6
cl_act_stuck_depth 6
g_always_run on
g_god off
hud_crosshair on
hud_crosshair_dist off
hud_draw on
hud_fov 0.50000
hud_info off
hud_weapon on
mouse_invert off
mouse_sens 0.21000
mt_input off
mt_sound on
net_cl_pending_lim 2
net_cl_update_rate 60
net_name oles
net_port 5445
net_sv_pending_lim 2
net_sv_update_rate 60
ph_fps 100
ph_gravity 20.00000
ph_squeeze_velocity 0.50000
rs_anisotropic on
rs_antialias off
rs_antialias_tv off
rs_clear_bb off
rs_detail_density 0.15000
rs_fullscreen on
rs_gamma 1.00000
rs_geometry_lod 1.00000
rs_glows_per_frame 12
rs_ib_size 512
rs_max_fps 200.00000
rs_min_fps 20.00000
rs_no_v_sync on
rs_occ_reject 0.00300
rs_occlusion off
rs_overdraw off
rs_renormalize off
rs_skeleton_update 64
rs_ssa_discard 5.00000
rs_ssa_dontsort 4096.00000
rs_stats on
rs_triplebuffer off
rs_vb_size 512
rs_wireframe off
snd_cull 0.07000
snd_doppler 0.30000
snd_freq 22khz
snd_model Default
snd_occlusion on
snd_occlusion_scale 0.85000
snd_relaxtime 10
snd_rolloff 0.30000
snd_volume_eff 1.00000
snd_volume_master 0.00000
snd_volume_music 0.70000
texture_lod 1
texture_show_mips off
vid_bpp 16
vid_mode 800x600


Там еше все что ввели с клавы записывается в файл Engine.ini
как мне отслеживать эти вводы?
и как мне вызывать эти команды из файла?

И ещё вопрос(не в тему) как мне качать камеру чтобы эмитировать
реалистичную ходьбу?


Poison man   (2004-05-31 17:05:00) [24]

Я, честно сказать, не спец по консолям - ни разу их не делал... Но, понимая, что и мне когда-нибудь придется столкнуться с этой проблемой, выработал такое решение. Но не знаю, как оно вам понравится :)
Сама консоль в GLScene делается спрайтом, т.к. он постоянно "лицом к камере". На него текстурку для красоты какую-нить... Затем сам текст. Отслеживается нажатие всех клавиш в какой-нить проце, с помощью кой-каких примочек (см. примеры в GLScene) вводимый текст преобразуется в битмаповый (вроде бы). Его текстурой на спрайт поверх основного фона. Вот и вся графика. Главное за перерисовкой проследить.
А сама рабочая часть консоли выглядит в виде файла со списком команд, которые предусмотрены в игре. А затем компилятор проверяет команду, ее значение, и выставляет ее в игре.


FRick   (2004-05-31 17:05:00) [25]

"В принципе с графической частью можно не заморачиваться и сделать консоль в виде текста поверх основной картинки"

Мне имено надо заморочится с графикой!
А так я уже делал только выглядит это неочень красиво!


NailMan   (2004-05-31 15:49:00) [26]

Не знаю как на GLScene, но на Директ3Д реализация визуализауии пишется просто, но с оговорками, а вот все остальное - интеграция интерфеса консоли в движок, влияние на различные параметры, распознавание команд и т.д., имхо, самая большая часть консоли.

У меня вот консоль реализована довольно стандартно, но до этого пришлось писать все элемены GUI, которые юзались в консоли, да и универсальный экзекутор команд немерянно весит в строках кода.

В принципе с графической частью можно не заморачиваться и сделать кончсоль в виде текста поверх основной картинки. Надо только описать типа TListBox, но виртуальный, т.е. элементов нет, а текст рендерящийся есть.

---
WBR, NailMan aka 2:5020/3337.13


Iraizor   (2004-05-31 15:38:00) [27]

ууу, это огромный кусок кода, тема для статьи ... тем более нужно в консоль команды забивать , ты думал это просто какую-то процедуру нужно вызавть ? это все пишется руками.... так что поизучай ddraw и dinput. и задавай уже более конкретные вопросы


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо