Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

Стрельба в играх   Найти похожие ветки 

 
scout   (2003-04-17 20:33) [0]

Я вижу здесь очень много умных людей, все вроде что то делают, а на такой казалось бы простой вопрос КАК СДЕЛАТЬ СТРЕЛЬБУ никто не может ответеть. Может у кого есть какие то идеи или мысли на этот счёт - выкладывыйте. Я буду очень рад.
P.S. Основная проблема в том как в реальном времени создавать пули. 0_0


 
aldor   (2003-04-17 22:05) [1]

Легко можно обвиниить обитателей форума в некомпетентности, но, обращаю внимание, также легко можно правильно и четко ставить вопросы, чего вам и советую.
Вопрос по классу похож на вопрос "Как сделать игруху пра самалеты?".
В реальном времени пули создавать не получится - этим занимаютсся заводы :)
На самом деле Делфи, да и всё ООП позволяет легко создавать любые объекты, в том числе и описывающие пули. Это можно сделать и не используя ООП. Если вас интересует графическое отображение - здесь надо еще описать само построение движка и "нулевого цикла". Если соотвествие физическим законам - вам тут расскажут про имитацию полета пули. Задайте вопрос точнее и, вероятнее всего, получите ответ.

http://www.rsdn.ru/howtoask.htm - советывал бы читать всем.


 
Denton   (2003-04-17 22:45) [2]


> http://www.rsdn.ru/howtoask.htm - советывал бы читать
> всем.


Я конешно понимаю что вопросы толковые надо задавать но какой дурак это читать будет?


 
TButton   (2003-04-18 21:25) [3]

2 Denton ©
а я читал...


 
VD601   (2003-04-18 21:47) [4]

2Denton
Думаю каждый, кто сможет прочитать и принять к сведению эту статью, станет гораздо меньше относиться к дуракам.


 
scout   (2003-04-19 23:07) [5]

>На самом деле Делфи, да и всё ООП позволяет легко создавать любые объекты, в том числе и описывающие пули

Ну вот я и спрашиваю КАК СОЗДАВАТЬ ОБЬЕКТЫ В РЕАЛЬНОМ ВРЕМЕНИ.
Я нажимаю кнопку появляется пуля, я ещё раз нажимаю кнопку снова появляется пуля.(чего не понятного)
Я делаю в GLScene, не буду же я изначально делать десять(или 20) FreeForm, а потом их отображать по очериде.


 
aldor   (2003-04-20 21:29) [6]

2scout

Тогда пули здесь не причем. В Делфи в реальном времени можно создавать объекты классов. Что они будут описывать - пули или дверные ручки - это ваше дело.
Описание классов здесь просто не уместится. Именно для этого пишуться книги. В любой серьезной книге несколько глав посвещено именно этому. В общем, RTFM.


 
Alek Aaz   (2003-04-21 12:23) [7]

Да вопрос можно поставить еще проще!
1. Создаем несколько однотипных объектов /это я умею
2. Удаляем ненужный объект (произвольно или по условию) / это я не могу сделать, пока...

2aldor
Дай плиз пример кода!
Можно на примере TTreeView
Вот конкретная задача:
1. Раз в секунду создавать TTreeNodes
2. Имя новой TTreeNodes формировать как "pl"+("x"или"y"или"z")+ "ччммсс"(время создания пули)
3. Удалять TTreeNodes если в имени есть "х"-через 5 сек,"у"-через 20 сек, "z"-через 40
Нужен пример кода. К GLScene потом прикрутим сами.
Спасибо.


 
jel   (2003-04-21 14:27) [8]

Можно конечно и с TreeView, но зачем удалять гланды через задний проход?
Возьми tList, добавляй к нему объекты типа tMyBullet, которые будут хранить координаты твоей пули в пространстве и время ее жизни. Потом в главном цикле игры время жизни уменьшай, координаты увеличивай, и при истечении времени жизни удаляй объект из списка. (кстати ВСЕ отображаемое на экране удобно хранить в таком списке и потом для рендеринга просто пробежаться по списку и отрисовать что надо там где надо :)


 
scout   (2003-04-21 19:40) [9]

Jel а по подробнее можно.?


 
cyborg   (2003-04-21 20:12) [10]

А поподробнее: "пилите Шура, пилите". :)


 
Владимир Васильев   (2003-04-21 20:47) [11]

> Основная проблема в том как в реальном времени создавать пули.
Пуля:=TПуля.Create(Direction);


 
Alek Aaz   (2003-04-23 06:30) [12]

Да мля...
2Владимир Васильев
> Основная проблема в том как в реальном времени создавать пули.
Нет, это не основная проблема. Как я уже написал я это умею делать. Проблема - корректно их удалять. Прошу пример в коде. Условие выше.
2jel
Меня не интересуют гланды и задний проход. Можно конечно и через TList сделать, но TTreeView ближе по структуре к TGLScene.
Тем более, что в случае с использованием TList придется вести два списка - GLScene1 и List1 что на мой взгляд и есть геморой. Вести координаты и время жизни в обоих списках. А на фига?
Повторю еще раз: Прошу пример в коде. Условие выше.
2cyborg
Да мы-то пилим ... Мне просто интересно, как народ работает... там например монстров генерит и убивает динамически ...
И снова - Прошу пример в коде. Условие выше.



 
Alek Aaz   (2003-04-23 18:04) [13]

2cyborg
Ну вроде получилось :) Полная версия по e-mail.

Стрельба пулькой
procedure TForm1.Fire;
Var Tmp:TSphere;
t:integer;
begin
Tmp:=GLScene1.Objects.AddNewChild(TSphere) as TSphere;
Tmp.Name:="bull"+IntToStr(NBull);
Tmp.Position:=DummyCube2.Position;// Нужно доработать
Tmp.Direction:=DummyCube2.Direction;
Tmp.Material.FrontProperties.Emission.AsWinColor:=clWhite;
Tmp.Scale.SetVector(0.1,0.1,3);
Inc(NBull);
end;


Полет пульки

procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
newTime: Double);
Var a,t,t1:integer;
tmp:TGLBaseSceneObject;
tmp1:TSphere;
s:string;
begin
HandleKeys(deltaTime);
GLUserInterface1.Mouselook;
GLSceneViewer1.Invalidate;
GLUserInterface1.MouseUpdate;
// Двигаем пули
t1:=GLScene1.Objects.Count;
t:=0;
Repeat
s:= GLScene1.Objects.Children[t].Name;
IF Pos("bull",s)<>0 Then // если объект -наша созданная пуля
Begin
Tmp1:=GLScene1.Objects.Children[t] as TSphere;
Tmp1.Move(speedbull);
IF Tmp1.DistanceTo(Actor1)>200 then // далеко пуля ?
Begin
tmp1.Destroy;
t1:=GLScene1.Objects.Count;
End
Else t:=t+1;
End
Else t:=t+1;
Until t>(t1-1);
//
IF NBull=99999 then Nbull:=0;
end;


Мож кто улучшит алгоритм?


 
cyborg   (2003-04-23 23:59) [14]

Alek Aaz ©
Знаешь что я скажу? Я скажу, что игра где делается это: Repeat IF Pos("bull",s)<>0 Then - не игра, а один большой тормоз.


 
Alek Aaz   (2003-04-24 03:20) [15]

2cyborg
Предложи свое решение. :)
Что-то мне кажется, что я его не дождусь...

PS. Это еще что, вот если вставить еще проверку на столкновение...


 
cyborg   (2003-04-24 08:20) [16]

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

Боюсь я тебе не смогу объяснить как нужно делать, так как твою игру не я делаю, только ты знаешь что там к чему.

Но совет дам, бросай использование в игре различных List-ов и View-ов. А используй Array"s и Pointer"s и другие трудные слова :), и забудь что есть Sting пока не понадобится вывод на экран или нужно хранить имена и названия предметам и персонажам.


 
Odin   (2003-04-24 12:53) [17]

Мда я пока прочел что тут написано волосы дыбором встали.

Посмотри классный пример ( http://delphigfx.mastak.ru/samples5.htm - он там первый), как можно повесить свой обработчик на события: там показанно как наиболее элегантно обойти проблему
Repeat IF Pos("bull",s)<>0 - кстати это самый быстрый способ, только писать надо так:
Bullets :Array of TBullet;

while not finished do
begin
if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then
begin
if (msg.message = WM_QUIT) then
finished := True
else
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end
else
begin
I:=-1;
While I<High(Bullets)do With Bullets[I] do
Begin
Inc(I);
Move;
glDraw;
End;
While I<High(Bullets)do
If Bullets[I].Dead then
Begin
Bullets[I].Free;
For J:=I to High(Bullets)-1 do
Bullets[J]:=Bullets[J+1];
SetLength(Bullets,Length(Bullets)-1);
End;
glShow;
ProcessKeys;
If Key[SPACE_BAR] then
Begin
SetLength(Bullets,Length(Bullets)+1);
( Bullets) Мда я пока прочел что тут написано волосы дыбором встали.

Посмотри классный пример ( http://delphigfx.mastak.ru/samples5.htm - он там первый), как можно повесить свой обработчик на события: там показанно как наиболее элегантно обойти проблему
Repeat IF Pos("bull",s)<>0 - кстати это самый быстрый способ, только писать надо так:
Bullets :Array of TBullet;

while not finished do
begin
if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then
begin
if (msg.message = WM_QUIT) then
finished := True
else
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end
else
begin
I:=-1;
While I<High(Bullets)do With Bullets[I] do
Begin
Inc(I);
Move;
glDraw;
End;
While I<High(Bullets)do
If Bullets[I].Dead then
Begin
Bullets[I].Free;
For J:=I to High(Bullets)-1 do
Bullets[J]:=Bullets[J+1];
SetLength(Bullets,Length(Bullets)-1);
End;
glShow;
ProcessKeys;
If Key[SPACE_BAR] then
Begin
SetLength(Bullets,Length(Bullets)+1);
Bullets[High(Bullets)]:=TBull.Create;
End;

ВОТ ЗДЕСЬ ОБРАБОТКА КООРДИНАТ ПУЛИ
Finished:=Finished or FForm.Finished;
end;
end;

Про саму пулю:
TBullet = class
Public
Dead :Boolean;
X,Y,Z :GLFloat;
Constructor Create;
Procedure Move;
Procedure glDraw;
End;

Procedure TBullet.Move;
Begin
X:=X+1;
Y:=Y+2;
Z:=Z+3;
If Z>200 then Dead:=True;
End;


 
Владимир Васильев   (2003-04-24 16:07) [18]

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


 
Alek Aaz   (2003-04-25 07:50) [19]

2cyborg
Боюсь я тебе не смогу объяснить как нужно делать, так как твою игру не я делаю, только ты знаешь что там к чему.
Моя игра не всчет. Меня больше интересует как это делается "правильно". Или вообще не делал еще?
бросай использование в игре различных List-ов и View-ов
Я их и не использую. Мне нужен был пример, как работать с динамическими массивами. TTreeView - самый подходящий пример.
А используй Array"s и Pointer"s и другие трудные слова :)
ИМХО. GLScene уже и есть массив объектов используемых в сцене. Плодить массивы я смысла не вижу. Поясню. Скажем есть массивы персонажей, пуль, объектов. В тик таймера нужно
1. Пробежаться по массиву персонажей передвинуть их, проверить параметры - ненужные уничтожить. сгенерировать события.
1.1. Отобразить изменение в GLScene.
2. То-же, для пуль.
2.1. Отобразить изменение в GLScene.
3. То-же, для объектов.
3.1. Отобразить изменение в GLScene.
4. Рендеринг GLScene;
Как видно, придется каждый раз все равно рыть GLScene в поисках нашего объекта, чтобы его передвинуть или убрать со сцены. А как его найти? По индексу? А индекс меняется в зависимости от количества объектов. На мой взгляд - работа с именем объекта единственное решение. Цикл же поиска будет повторятся трижды.
ИМХО. Использование массивов будет целесообразно когда я буду использовать чистый OpenGL или DirectX или что там еще. Там цикл будет такой:
1. Пробежаться по массиву персонажей передвинуть их, проверить параметры - ненужные уничтожить. сгенерировать события.
2. То-же, для пуль.
3. То-же, для объектов.
4. Рендеринг сцены
А если массив объектов уже есть, зачем огород городить?
2Odin
Мда я пока прочел что тут написано волосы дыбором встали
Боже! неужели все так безнадежно?
Посмотри классный пример
Обязательно! Спасибо.
Repeat IF Pos("bull",s)<>0 - кстати это самый быстрый способ
Во! Я ж говорил, еще не все потеряно! Есть еще песок в порохавницах! Ай да Я, ай да ... мн... Ладно... А какой медленный?
только писать надо так
Ну вот, этого и добивались! Хоть есть шо-то для изучения ...
Он для чистого OpenGL наскока я понимаю? Спасибо. Изучим.
2Владимир Васильев
Если вы пишете серьёзную игру...
Да даже если и не серьезную, затраты по времени будут велики. Что вы предлогаете? Можно кусочком кода. Если он есть :)
У меня такие идеи: два условия уничтожения пули.
1. улетела далеко от родителя (типа потеряла убойную силу)
2. попала в объект(в стену, в актера, в объект)
Первое - понятно, см. код выше.
Второе - кастаем луч из центра пули по направлению движения.
Если есть точка пересечения с плоскостью - находим: дистанцию и какому объекту принадлежит плоскость. Если дистанция меньше скорости пули - пулю уничтожаем, объекту шлем событие - попали и координаты попадания.




 
cyborg   (2003-04-25 11:11) [20]

Alek Aaz В начале скажу, чтот GLScene я даже не видел, по ней ничего не могу сказать. А вот по поводу как и что хранить пожалуйста. Во первых, думаю GLScene работает на основе динамических массивов. Динамический массив - залог тормозов, знаешь как он работает? Если в массиве кончилось место, то вновь выделяется память для него и полностью копируется содержимое, потом старый массив удаляется. Использование таких массивов сильно снижает скорость игры.

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

Я незнаю как устроена GLScene, но понятно, что для универсальности она жертвует скоростью, притом сильно. Я тебя не призываю бросать GLScene, но ускорить работу ты можешь своими силами.

Поиск объектов делается по типу, которому присваиваются твои константы, обозначающие что это такое, поиск идёт так, как ты делаешь со строками, только вместо строк будут числа, которым присваиваются константы твоего предмета и при переборе смотрится по константам что это такое.

Например можно ускорить процесс твоего кода, по крайней мере в 2 раза, твой код:

While I<High(Bullets)do With Bullets[I] do
Begin
Inc(I);
Move;
glDraw;
End;
While I<High(Bullets)do
If Bullets[I].Dead then
Begin
Bullets[I].Free;
For J:=I to High(Bullets)-1 do
Bullets[J]:=Bullets[J+1];
SetLength(Bullets,Length(Bullets)-1);
End;


На примерно так:


While I<High(Bullets)do
If Bullets[I].Dead then
Begin
Bullets[I].Free;
For J:=I to High(Bullets)-1 do
Bullets[J]:=Bullets[J+1];
SetLength(Bullets,Length(Bullets)-1);
End else
Begin
( I)
Alek Aaz В начале скажу, чтот GLScene я даже не видел, по ней ничего не могу сказать. А вот по поводу как и что хранить пожалуйста. Во первых, думаю GLScene работает на основе динамических массивов. Динамический массив - залог тормозов, знаешь как он работает? Если в массиве кончилось место, то вновь выделяется память для него и полностью копируется содержимое, потом старый массив удаляется. Использование таких массивов сильно снижает скорость игры.

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

Я незнаю как устроена GLScene, но понятно, что для универсальности она жертвует скоростью, притом сильно. Я тебя не призываю бросать GLScene, но ускорить работу ты можешь своими силами.

Поиск объектов делается по типу, которому присваиваются твои константы, обозначающие что это такое, поиск идёт так, как ты делаешь со строками, только вместо строк будут числа, которым присваиваются константы твоего предмета и при переборе смотрится по константам что это такое.

Например можно ускорить процесс твоего кода, по крайней мере в 2 раза, твой код:

While I<High(Bullets)do With Bullets[I] do
Begin
Inc(I);
Move;
glDraw;
End;
While I<High(Bullets)do
If Bullets[I].Dead then
Begin
Bullets[I].Free;
For J:=I to High(Bullets)-1 do
Bullets[J]:=Bullets[J+1];
SetLength(Bullets,Length(Bullets)-1);
End;


На примерно так:


While I<High(Bullets)do
If Bullets[I].Dead then
Begin
Bullets[I].Free;
For J:=I to High(Bullets)-1 do
Bullets[J]:=Bullets[J+1];
SetLength(Bullets,Length(Bullets)-1);
End else
Begin
Inc(I);
Move;
glDraw;
End;


Как видишь вместо двух циклов идёт один и так будет быстрее примерно в 2 раза. За правильность кода не ручаюсь, я тебе масль подал. И ещё там SetLength, знаешь что оно делает? Я тебе выше сказал что :) и это у тебя на каждую пулю идёт.


 
Владимир Васильев   (2003-04-25 11:27) [21]

>Alek Aaz
по поводу стратеги проверки на соударения я писал довольно подробно ранее - посмотрите в архиве форума.

В применении к объекту TПуля из этих рассуждения следует, что он, как и , например, TNPC или TPlayer должны иметь общий менеджер проверки на соударения и не использовать прямой метод перебора пар и расстояний.


С "чисто пулями" же можно поступить очень просто: считать , что пуля достигает цели "мгновенно", но ввести поправку на меткость стрелка, возможно, даже случайную. При этом объект "пуля" существует только виртуально - он не визуализируется.




 
Juster~   (2003-04-25 11:45) [22]

-> Владимир Васильев: А как проверять попадание пули в стены/браши? Можно как нибудь прикрутить деревья (bsp, octree)?


 
Хранитель_7К   (2003-04-25 11:49) [23]

2
> Juster~

Не можно, а нужно.
По моему иначе никак


 
Alek Aaz   (2003-04-28 09:49) [24]

2cyborg
Использование таких массивов сильно снижает скорость игры
Вполне возможно. Учтем.

Надеюсь знаешь что такое константы и как использовать условные операторы?
Кто я-то? Не не знаю... Агу-агу... что за страшные слова?

можно ускорить процесс твоего кода
Это не мой код. Это код Odinа

Ладно, спасибо.

2Владимир Васильев
по поводу стратеги проверки
Как хоть тема называется? Или какое ключевое слово? По поиску чтой-то не находится.


 
cyborg   (2003-04-28 10:22) [25]

Alek Aaz ©
>Кто я-то? Не не знаю... Агу-агу... что за страшные слова?

С таким подходом желание помочь исчезает. Твой это код или Одина меня не волнует, ты его привёл как пример твоего кода.


 
Alek Aaz   (2003-04-29 08:10) [26]

2cyborg
С таким подходом желание помочь исчезает. Твой это код или Одина меня не волнует, ты его привёл как пример твоего кода.
Извини конечно, но с таким подходом отпадает всякая охота спрашивать. Если ты внимательно посмотришь ветку, то нормально ответил только odin (и то сумел поехидничать). Остальные - общие разглагольствования по теме "какие мы умные, а вы тут дауны - умеющие только мышкой елозить".


 
cyborg   (2003-04-29 09:21) [27]

Если cyborg © (25.04.03 11:11) для тебя разглагольствования по теме "какие мы умные, а вы тут дауны - умеющие только мышкой елозить", тогда мне очень жаль.


 
scout   (2003-04-29 19:47) [28]

Я пока не проф в програмировании и вариант ODINA не очень понял.
Если не сложно Alek Aaz чем твой код принципиально(кроме производительности как я понял) может повлиять на мой(читай свой)
проект?


 
Alek Aaz   (2003-05-02 05:25) [29]

2scout
Не понял? Мой код на мой проект принципиально повлиять не может даже в плане производительности. Если есть мой код, значит будет и проект. Если кода нет - нет проекта. Если ты имел в виду код Odin"а то пока ничем. Он ориентирован на "чистое" программирование. Для начала покатит и мой. Но знать и проанализировать код I>Odin"а стоит. И код cyborg"a тоже.


 
Кен   (2003-05-04 01:39) [30]

Вот код создания пуль и их автоматического удаления через 2 секунды. Чтобы далеко не улетали. GLScene. Работающий пример с исходником можно скачать на страничке : http://www.triponavtika.narod.ru/game.html

Следующий вопрос, как проверять попала пуля куда-нибудь или нет ?


procedure TForm1.Fire; // Создание пуль.
begin with TSphere(Bullets.AddNewChild(TSphere)) do begin
Name :="bullet"+IntToStr(NBullet);
Position :=ActorCube.Position;
Direction :=ActorCube.Direction;
Material.FrontProperties.Emission.AsWinColor :=clWhite;
Scale.SetVector(0.1,0.1,3);
Move(1.5+0.5); // Чтобы пуля начинала полёт чуть впереди актёра.
Position.Y := Position.Y + 0.5; // Чуть поднимаем пулю, чтобы стрелять не х#ем. :)
GetOrCreateInertia(Behaviours).TranslationSpeed.AsVector := Direction.AsVector;; // Создаём инерцию
// В дальнейшем надо будет учесть направление стрельбы по высоте.
GetOrCreateInertia(Behaviours).TranslationSpeed.Scale(30); // Скорость полёта пули - 30.
OnProgress := FireAutoDestroy; // Подключаем автоудаление пуль.
( NBullet)
Вот код создания пуль и их автоматического удаления через 2 секунды. Чтобы далеко не улетали. GLScene. Работающий пример с исходником можно скачать на страничке : http://www.triponavtika.narod.ru/game.html

Следующий вопрос, как проверять попала пуля куда-нибудь или нет ?


procedure TForm1.Fire; // Создание пуль.
begin with TSphere(Bullets.AddNewChild(TSphere)) do begin
Name :="bullet"+IntToStr(NBullet);
Position :=ActorCube.Position;
Direction :=ActorCube.Direction;
Material.FrontProperties.Emission.AsWinColor :=clWhite;
Scale.SetVector(0.1,0.1,3);
Move(1.5+0.5); // Чтобы пуля начинала полёт чуть впереди актёра.
Position.Y := Position.Y + 0.5; // Чуть поднимаем пулю, чтобы стрелять не х#ем. :)
GetOrCreateInertia(Behaviours).TranslationSpeed.AsVector := Direction.AsVector;; // Создаём инерцию
// В дальнейшем надо будет учесть направление стрельбы по высоте.
GetOrCreateInertia(Behaviours).TranslationSpeed.Scale(30); // Скорость полёта пули - 30.
OnProgress := FireAutoDestroy; // Подключаем автоудаление пуль.
end; Inc(NBullet);
end;

// Автоудаление пуль через некоторое время ..
procedure TForm1.FireAutoDestroy(Sender: TObject; const deltaTime, newTime: Double);
begin with TSphere(Sender) do begin
TagFloat := TagFloat+deltaTime;
if TagFloat>2 then Destroy; // Пули уничтожаем через 2 секунды после создания. Можно дольше или меньше.
end; end;



 
Arch-vile   (2003-05-04 23:26) [31]

2Кен
блин! не рекламируй свою **** в каждом топике! задолбал уже! вряд ли кто-то заглядывает только в те топики, которые он создал!
к слову - первый раз вижу КЕНгуру в форуме. Иван Иваныч, не сочти за обиду - у тебя в скринсэйвере так написано



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.032 c
14-42038
Brahman
2003-10-16 10:36
2003.11.13
Соционика


3-40926
Alex
2003-10-19 13:12
2003.11.13
Поиск повторяющихся записей


14-42113
denkop
2003-10-23 00:51
2003.11.13
Купил цифровую видеокамеру, хочу вынуть из неё цифровое видео


11-41132
Юрий
2003-02-13 18:52
2003.11.13
Свойства TKolPanel


14-42042
Карелин Артем
2003-10-22 15:53
2003.11.13
Покритикуйте мою вторую попытку многопоточного доступа к базе.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский