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

Вниз

Алгоритм выстрела   Найти похожие ветки 

 
|<ent   (2007-07-10 19:55) [0]

Добрый день! Я начинающий, у меня возникла проблема следующего характера. Я делаю игру(стрелялку) и у меня проблема с выстрелами. Для создания выстрела я использую этот код

//по команде рисуем снаряд
     if pul.fireon then
     begin
       //pul.XRot:=ModR;
       if Pul.active then Pul.Forv;
Pul.Fast:=14;
       Map.GetY(Cam.XPos, Cam.ZPos);
       glBindTexture(GL_TEXTURE_2D, den);
       pul.Rend(0,0,plus,1,10,10);//рисуем снаряд
       EffectDraw(Pul.XPos, -Pul.YPos, Pul.ZPos);//рисуем дым от снаряда
       MAp.GetY(Pul.XPos, Pul.ZPos);
       if Map.BAN > -Pul.YPos-0.7 then // проверка условия косания земли
       begin
         VzrivBool:=True;
         pul.active:=false;
         if VzrivBool= true then
         begin
           VX:=Pul.XPos;
           VY:=Pul.YPos;
           VZ:=Pul.ZPos;
           Np.X:=VX;Тоесть рендер
           NP.Y:=VY;
           Np.Z:=VZ;
           end;
           NP.active:= true;//рисуем врыв
           end;
           NP.active:= true;
     end; // здесь заканчивается рендеринг снаряда

{Прорисовка эффекта}
procedure EffectDraw(x, y, z: glFloat);
var
 cam: TGLNrf3;
begin
 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_Decal);
 glEnable(GL_NORMALIZE);
 glPushMatrix;
   glDisable(gl_Fog);
   glDisable(GL_LIGHTING);
   glTranslatef(-x,y,-z);
   glScaleF(0.02, 0.02, 0.02);
   glrotatef(angy,1,0,0);
   glrotatef(angx,0,0,1);
   glcolor4f(0.5,0.5,0.5,0.5);
   glEnable(GL_DEPTH_TEST);
   glDisable(GL_BLEND);
   glEnable(GL_TEXTURE_2D);
   glEnable(GL_BLEND);
   glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ONE);
   rotate_point(10,part.posis[0],part.posis[1]);
   cam[0]:=0; cam[1]:=1; cam[2]:=0;
   rotate_point( angy-270,cam[1],cam[2]);
   rotate_point(-angx-180,cam[0],cam[1]);
   part2.add_particle;
   part2.reset_pr;
   XGLEnableTexture(LTGA);
   part2.draw_par(cam, 6500);
   glEnable(GL_DEPTH_TEST);
   glDisable(GL_BLEND);
   glEnable(gl_Fog);
   glEnable(GL_LIGHTING);
 glPopMatrix;
end;
//прорисовка снаряда
procedure Tpul.Rend( x, y, z, r: GLFloat; slices, stacks: GLInt);
var
 quad: GLUQuadricObj;
begin
 glEnable(GL_CULL_FACE);
 glCullFace(GL_Back);
 glEnable(GL_BLEND);
 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
 quad := gluNewQuadric;
 gluQuadricNormals(quad, GLU_SMOOTH); // для освещения, если надо
 gluQuadricTexture(quad, true);       // для текстуры, если надо
 glColor3f(1, 0, 0);
 glColor4f(0.0,0.0, 0, 0.1);
 glPushMatrix;
   glTranslatef( -x-Xpos, y-ypos, -z-zpos);
   gluSphere( quad, r, slices, stacks );
     glPopMatrix;
 gluDeleteQuadric( quad );
 glDisable(GL_BLEND);
 glDisable(GL_CULL_FACE);
end;

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


 
Efir ©   (2007-07-10 20:07) [1]

Ну так создай массив, в который будешь добавлять вновь созданную пулю, а если она долетела до земли, то удалять из массива. А ещё лучше использовать список.


 
@!!ex ©   (2007-07-10 21:24) [2]

Парень... Забей делать стрелялку...
Я конечно никого не смею мерить с собой, но мой опыт:
10 лет программирования на дельфи, пол года работы в одной из старейших геймдев контор России.
2 года ОпенГЛ и DX и всякой другой ерунды...
Пол года для 3Д стрелялки только внешнюю оболочку писал.
Тоесть сейчас(после полугода разработки) есть частично готовый(колиззия, загрузка уровней, скелетная анимация, сло-мо, попадания по частям тела, скриптовый двиг для уровней, полтора десятка видов оружия, включая гранатометы и ракетницы, поддержка рукопашного боя) двиг без ИИ и физики.
При том, что я писал все свободное время не останавливаясь практически и не переписывал ничего, при том, что я ЗНАЛ что и как надо писать. Тоесть вопросов вида, как же все таки сделать это?? не возникало.
Простая архитектура на базе ООП. И самое главное... Сейчас я скорее всгео НЕ БУДУ доделывать эту игру, поскольку тупо надо все переделывать.
А теперь прикинь, сколько времени ты будешь писать проект, если ты с этим всем ВООБЩЕ не знаком.
А ты не знаком, это видно по коду и по вопросу.
Для того, чтобы написать крупный проект, нужно две вещи:
1) понимать, как работает компьютер(читай понимать ассемблер), как память распределяется и все такое.
2) Знать ООП.
Без этого написать что-то серьещное не реально.
1) Будешь делать много ошибок тупейших. Типа описанной тобой.
2) Будет ужасный код, в котором запутаешься.(Опять же, у меня есть проект, детский на штуку строк... Без ООП. Все в одном модуле... Там черт ногу сломит...)

P.S.
Я не презываю делать тетрис(Хотя если вспомнить тетрис от Creative - более чем достойное начало). Я призываю тебя ЗДРАВО оценить свои знания на НАСТОЯЩИЙ момент и сделать тот проект, который ты сейчас МОЖЕШЬ сделать. Тоесть возьми проект и банально в голове разложи ео на составляющие. И подумаю как каждую составляющую можно решаить(не конкретику, общее решение), если за 10 минут смог это сделать, берись за проект.

P.P.S.
Все выше сказанное - сугубо ИМХО.


 
antonn ©   (2007-07-10 22:21) [3]


> Пол года для 3Д стрелялки только внешнюю оболочку писал.

дааа??? :)))
а тут http://code.darthman.com/news.php подобное примерно в месяц пишут, полностью))))


 
@!!ex ©   (2007-07-10 22:44) [4]

> [3] antonn ©   (10.07.07 22:21)

Ну во первых ты не знаешь что я писал. ;)
А во вторых,я про себя говорю, а не про Дартмана. Он круче меня по кодингу, тут я и спорить не буду.


 
@!!ex ©   (2007-07-10 22:46) [5]

Кстати, если дашь ссылочку на конкретнйы пример 3д двигла качественного написанного за месяц, буду благодарен...

P.S.
Alien Shooter писали 2 месяца. ;)


 
RzCoDer ©   (2007-07-10 22:49) [6]


> @!!ex ©

ну ты даёшь) человек конкретный вопрос задаёт, а ты тут такое... наболело чтоли?)


 
antonn ©   (2007-07-11 00:00) [7]


>
> Ну во первых ты не знаешь что я писал. ;)

не знаю, но вижу код, который выше:)) Если ты с этим кодом проводишь параллель - значит не просто так? :)


 
@!!ex ©   (2007-07-11 00:44) [8]


> RzCoDer ©   (10.07.07 22:49) [6]

Ну и наболело тоже...
Поскольку своими проектами не занимаюсь уже с января... Времени нету.. и желания кодить после работы...
Да и на вопрос уже ответили в [1]


> antonn ©   (11.07.07 00:00) [7]

Я вижу код и могу судить о не высоком уровне программирования.
Кстати, ссылочку то дай, на проект который за месяц написали.(Можно даже не с 0, хотя я говорил именно об этом)


 
antonn ©   (2007-07-11 01:39) [9]


> @!!ex ©   (11.07.07 00:44) [8]

http://code.darthman.com/viewpage.php?page_id=19


 
@!!ex ©   (2007-07-11 11:42) [10]

И чего общего в этом конкурсе с тем, что я описал?
(
колиззия - максимум что есть в конкурсных работах - пересечение прямоугольников.
загрузка уровней - уровни элементарные.
скелетная анимация -  есть, тут не поспоришь.
сло-мо -  не увидел.
попадания по частям тела -  не увидел.
скриптовый двиг для уровней - не увидел.
полтора десятка видов оружия,включая гранатометы и ракетницы -  не увидел.
поддержка рукопашного боя -  не увидел.
)
И вообще из этих демок только одна - 3д экшн.
половина из них вообще в 2Д.
Д аи написаны не с 0.
Вот и месяц.
Странный пример. Чесс слово.


 
antonn ©   (2007-07-11 12:58) [11]


> Странный пример. Чесс слово.

странный ты, чесс слово:)
"Пол года для 3Д стрелялки только внешнюю оболочку писал." - вот в этой фразе ниче такого никак по умолчанию не входит, не надо пальцы гнуть, все равно никто не ахнет:)


 
@!!ex ©   (2007-07-11 15:08) [12]


> antonn ©   (11.07.07 12:58) [11]

Бррр. Да ни гну я пальцы. Привожу пример просто. А ты читаешь ИМХО как то через строчку...

По умолчанию не входит. Поэтому я и написал дальше:

> Тоесть сейчас(после полугода разработки) есть частично готовый(колиззия,
>  загрузка уровней, скелетная анимация, сло-мо, попадания
> по частям тела, скриптовый двиг для уровней, полтора десятка
> видов оружия, включая гранатометы и ракетницы, поддержка
> рукопашного боя) двиг без ИИ и физики.


 
Домик   (2007-07-11 19:03) [13]


> @!!ex ©   (10.07.07 21:24) [2]
> Парень... Забей делать стрелялку...

Это ты автору сразу предлагаешь убить себя об стену? :)
Если всего боятся и ни за что не браться, то ничему не научишься... так что все нормально, проблемы они как раз, для того чтобы их преодолевать и находить решения...


 
@!!ex ©   (2007-07-11 19:59) [14]

> [13] Домик   (11.07.07 19:03)

Зачем убиваться? делать что нить попроще...
А потом уже и убийцу HL можно сваять.


 
|<ent   (2007-07-11 20:00) [15]

Помогите мне


 
@!!ex ©   (2007-07-11 21:06) [16]

Чем помочь то? Сказали те: юзай массив.


 
|<ent   (2007-07-11 21:50) [17]

А как именно?


 
ANTPro ©   (2007-07-11 22:36) [18]

> [17] |<ent   (11.07.07 21:50)
Приблизительно так:
type
 TCoord=record
   X,Y,Z:Integer;
 end;
var
 Missiles:array of TCoord;


 
@!!ex ©   (2007-07-11 23:54) [19]

> [17] |<ent   (11.07.07 21:50)

Народ, и после таких вопросов вы все еще считаете, что в своем первом опсте я был не прав??


> [18] ANTPro ©   (11.07.07 22:36)

Уровня знаний не хватит, чтобы понять динамические массивы....


> |<ent
, мой тебе совет, забей пока на игру и возьми какую нить простоую книжку для начинающих. Учебник. Где просто тупо будут объяснятся основы. Я понимаю, тебе влом... Но дело в том, что без основ все равно ничерта не получится. Я могу тебе дать готовый код работы с пулей. Но легче тебе от этого не станет. Ты должен ПОНЯТЬ как оно работает. Аозьми книдку и просто тупо прочитай и сделай все примеры. Я в свое время так и сделал, когда с паскаля на дельфи переходил. Просто весь день читал книжку и клепал примеры. Очень помогло.


 
Cash ©   (2007-07-12 09:48) [20]

(ех... странник зашел на огонек к знакомым, а они все такие же, радует ^^)
Код 0-го поста написан своими руками? Если да, то не верю! :)

В сторону объектов и классов даж плевать не буду, наверное еще рано...
Масив, причем именно того типа, который ANTPro в [18] указал.

* выделение масива в N записей - SetLength(Missiles, N)
* освобождение памяти масива - Finalize(Missiles) или просто
выставить указатель на масив в nil.
* обращение к N-ому элементу масива - Missiles[N]
да... вощем вроде все ^^

(т.к. давно вернулся в обитель C++, точно не помню параметров,
а справки делфевой на работе нету :))) )


 
Jeer ©   (2007-07-12 10:11) [21]


> освобождение памяти масива - Finalize(Missiles) или просто
> выставить указатель на масив в nil.


В Delphi освобождение памяти, выделенной под длинные строки и динамические массивы - автоматическое, при выходе из зоны видимости.
В пределах зоны видимости целесообразнее делать переопределение длины через SetLength(ar,0), если того требует функциональность


 
@!!ex ©   (2007-07-12 10:41) [22]

> освобождение памяти масива - Finalize(Missiles) или просто
>
> выставить указатель на масив в nil.

Если указатель в nil выставишь, память же не осободится...
Или я чего то не понимаю??


 
Jeer ©   (2007-07-12 12:59) [23]


> Или я чего то не понимаю??


Так точно.
Для управления памятью в дин. массивах, как и в длин.строках используется механизм подсчета ссылок.
Поскольку одна из ссылок принудительно уст в nil, то уменьшается число ссылок и компилятор здесь автоматически подставит освобождение памяти.


 
Sapersky   (2007-07-12 15:00) [24]

Смотрел в Delphi5 - и Finalize, и присвоение nil, и SetLength(ar,0) сводятся к одному и тому же System._DynArrayClear. Т.е. в общем без разницы; но для ясности ИМХО лучше Finalize или SetLength - чтобы потом ненароком не "освободить" присвоением nil обычный указатель.


 
Jeer ©   (2007-07-12 16:43) [25]


> Sapersky   (12.07.07 15:00) [24]


Верно, с учетом [21]


 
Cash ©   (2007-07-13 07:28) [26]

Ну Jeer, тыж понимаешь, для чего я указал методы освобождения памяти!
Я как то постебался над двумя товарищами :)) именно из за этого.

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

В делфе с масивами и указателями проще, С++ небрежностей не прощает :)
поэтому даже в делфе я всегда поступал так, как поступал бы в С++.


 
@!!ex ©   (2007-07-13 09:14) [27]

> [26] Cash ©   (13.07.07 07:28)

Самый правильный подход. ИМХО.


 
Jeer ©   (2007-07-13 13:47) [28]


> по окончании игры былоб
> разумно обнулять масив, а после начала - динамично выделять
> память


Ну вот в начале она и перераспределится, зачем освобождать-то :)


 
Rembo   (2007-07-24 00:20) [29]


> При том, что я писал все свободное время не останавливаясь
> практически и не переписывал ничего, при том, что я ЗНАЛ
> что и как надо писать. Тоесть вопросов вида, как же все
> таки сделать это?? не возникало.

Взрыв машины.
@!!ex ©   (07.07.07 13:23)  
Как красиво реализовать?
)))))))))))))))


 
@!!ex ©   (2007-07-24 11:57) [30]

> [29] Rembo   (24.07.07 00:20)

И что?
Каким боком вызрыв машины для скроллера относится к 3D Action"у?
В данном случае разговор о построении архитектуры и базовых алгоритмов.
Кркасота взрыва ну никак не относится к базовым возмлжностям движка. Ферштейн?


 
antonn ©   (2007-07-24 12:18) [31]


> @!!ex ©   (24.07.07 11:57) [30]


[4]
> Кстати мысль...
> Вопрос в том, как програмно порезать машину...


:)


 
@!!ex ©   (2007-07-24 12:28) [32]

> [31] antonn ©   (24.07.07 12:18)

и?
Мне интересно че вы пытаетесь доказать. :))
Словами не проще выразить?



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

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

Наверх




Память: 0.55 MB
Время: 0.062 c
15-1267637829
NailMan
2010-03-03 20:37
2010.08.27
Хорошая операторская работа


15-1266711780
KilkennyCat
2010-02-21 03:23
2010.08.27
586b наглядно


11-1221509060
tsugi
2008-09-16 00:04
2010.08.27
D2009


15-1274781377
boriskb
2010-05-25 13:56
2010.08.27
В игрушку с таким интерфейсом даже я поиграл бы


2-1272603366
oleg1963lora
2010-04-30 08:56
2010.08.27
А что у нас сегодня в DataSet e?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский