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

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

Алгоритм выстрела [Delphi, Windows]


Страницы:   1 2

|<ent ©   (2007-07-10 19:55:00) 

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

//по команде рисуем снаряд
     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.
Я очень прошу вас помочь мне так как покачто моих знаний не хватает, а игру очень хочется сделать.


@!!ex   (2007-07-11 15:08:00) [21]


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

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

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

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


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


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

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


@!!ex   (2007-07-11 11:42:00) [23]

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


antonn   (2007-07-11 01:39:00) [24]


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

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


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


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

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


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

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


antonn   (2007-07-11 00:00:00) [26]


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

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


RzCoDer   (2007-07-10 22:49:00) [27]


> @!!ex ©

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


@!!ex   (2007-07-10 22:46:00) [28]

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

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


@!!ex   (2007-07-10 22:44:00) [29]

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

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


antonn   (2007-07-10 22:21:00) [30]


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

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


@!!ex   (2007-07-10 21:24:00) [31]

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

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

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


Efir   (2007-07-10 20:07:00) [32]

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


Страницы:   1 2

Наверх

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