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

Вниз

GLScene!!!   Найти похожие ветки 

 
scout   (2003-03-17 22:23) [0]

Народ помогите!!! Как можно в GLScene реализовать стрельбу? Моя оснавная запара в том что я не знаю каким образом задать моему снаряду движение. Снаряд должен литеть туда куда в момент выстрела был направлен курсор . У меня 3D стрелялка.


 
JibSkeart   (2003-03-18 14:25) [1]

Берешь книжки по физике и читаешь ...
А вообше непонятно как ты хочешь сделать траекторию полета по прямой или ввиде параболы так сказать ...


 
pasha676   (2003-03-18 15:34) [2]

2scout


> Берешь книжки по физике и читаешь ...

не зависимо от того
> как ты хочешь сделать траекторию полета по прямой или ввиде
> параболы так сказать ...


Высчитываешь вектор скорости для пули. Через определенные интервалы прибавляешь вектор скорости к текущим координатам пули. Высчитываешь новый вектор скорости.....


 
scout   (2003-03-18 22:40) [3]

Как мне определить сам вектор в момент выстрела?


 
Nuke   (2003-03-20 05:40) [4]

Мдя не слушай их !

Ну в принципе на счёт вектора это самое оптимальное но для тех кто в геометрии и черчении не бум-бум !тоо....это будет немного сложно !Ё

Как ты знаеш у обьекта есть процедура Move
Пример(1)

Bull.Move(x);

Bull - Это сам обьект (Пуля)

Move - Процедура.Вызывающия движение обьекта по оси Z со на X растояние

X ( Длина) Мдя не слушай их !

Ну в принципе на счёт вектора это самое оптимальное но для тех кто в геометрии и черчении не бум-бум !тоо....это будет немного сложно !Ё

Как ты знаеш у обьекта есть процедура Move
Пример(1)

Bull.Move(x);

Bull - Это сам обьект (Пуля)

Move - Процедура.Вызывающия движение обьекта по оси Z со на X растояние

X - Это Число(Длина) на которую сдвинеться пуля !

Те будет трудновато если твой шутер будет типа видом от первого лица(Кавказкой национальности =) ) Тобиш вид из глаз !

А если у тя сам человек или кто такм у тя стреляет будет тока вертеться вокруг своей оси(Y) то тогда будет полегче !


 
scout   (2003-03-20 22:13) [5]

Нудак он типа от первого лица, но как мне всётаки всё енто сделать я так и не понял !!!


 
neuro   (2003-03-22 20:34) [6]

По-любому тебе нужно с вектором скорости заморачиваться. Вариант Nuke не пройдет как минимум потому, что у тебя персонаж может смотреть в призвольную сторону и не обязательно строго в направлении оси аппликат. Хотя можно вместе с персонажем (конкретнее с его глазами) вертеть и систему координат, но это извращение.

Лучше все-таки юзать скорость.Тогда все проще.Пусть у тебя есть класс пуль =), в котором содержаться указатели на все пули на карте, которые в данный момент находяться в процессе полета, тогда:
if (пуля.еще_летит == true)
пуля.координаты += пуля.вектор_скорости;



 
Nuke   (2003-03-22 21:46) [7]

if (пуля.еще_летит == true)
пуля.координаты += пуля.вектор_скорости;

И как это понять ?


 
neuro   (2003-03-22 21:50) [8]

2Nuke:

Очень просто..У тебя итератор бегает по еще летящим пулям, к-е реализованы как классы с методом bool flying(), которая возвращает true если пуля еще активна =)


 
scout   (2003-03-22 21:51) [9]

Вы не поняли... Как мне задать вектор по которому будет лететь пуля после выстрела!!!


 
Nuke   (2003-03-22 22:53) [10]

-=scout=-
старая запара !

Просто !


 
neuro   (2003-03-23 00:17) [11]

2Scout:

В смысле, как узнать компоненты вектора?? Дык:
v = speed*v0;
где speed = скорость пули (скаляр)
( во время выстрела) 2Scout:

В смысле, как узнать компоненты вектора?? Дык:
v = speed*v0;
где speed = скорость пули (скаляр)
v0 = единичный вектор, указывающий куда сейчас курсор смотрит (во время выстрела);


 
scout   (2003-03-24 19:51) [12]

А где мне взять значение v0 во время выстрела? (в этом вся запара)


 
Snap   (2003-03-24 20:01) [13]

Дак это зависит от положения пушки


 
neuro   (2003-03-24 20:40) [14]

пусть у тебя персонаж стоит в точке (x,y,z), а пушка у него под углом alpha к горизонту и под углом beta к нулевому меридиану =), простейшая геометрическая задача -- найти луч =).


 
Rampelstinskin   (2003-03-24 21:02) [15]

Я вот читаю и дамаю: Народ может вам институт закончить... Хотябы первый курс.


 
neuro   (2003-03-24 21:13) [16]

2Rampelstinskin: ну во-первых не во всех универах преподают физику.а во-вторых как спрашивают так и отвечаем =)


 
Rampelstinskin   (2003-03-24 21:18) [17]

2neuro Какая физика? Я про азы высшей математики без них в игроделанье вобще делать нечего.


 
neuro   (2003-03-24 21:19) [18]

2Rampelstinskin: ну здесь вообще-то высшей математики нету вообще..А где конкретно мы облажались?


 
Rampelstinskin   (2003-03-24 21:37) [19]

Я вобще о том с чем тут народ плюхается... Этому в первом саместе учат... Короче хочешь быть программистом иди в институт. Причем на математику ибо преподы программированию всеравно не научат. Тк как можно научить тому что не знаешь?


 
neuro   (2003-03-25 00:29) [20]

2Ramelstinsknin: вот я соббсно чисто математическое образование и получаю =).


 
Alek Aaz   (2003-03-25 16:13) [21]

Господа, кончайте базар!
Если не знаете, то так и отвечайте - не знаем. По поводу математического образования - знаний по складываню векторов вполне хватит и из школьного курса геометрии. Проблема в другом. Поясню.
В GLScene у объекта направление объекта задается двумя векторами Direction и Up. Оба вектора состоят из трех составляющих x,y,z и представляют собой единичный вектор (уверен, все присутствующие здесь что это такое:) Direction-вектор указывающий направление объекта относительно системы координат объекта - родителя. Up - вектор указывающий положение объекта относительно своей системы координат. При вызове процедуры Move(...) объект движется по направлению вектора Direction. Следовательно нашей пуле достаточно передать направление Direction Acter"a. Здесь важно отметить, что пуля не должна быть потомком Actor"a, а быть порождением Scene Root.
В итоге получаем:

procedure TForm1.FireClick(Sender: TObject);
begin
AsyncTimer1.Enabled:=True;
FireTest:=True;
Bull.Visible:=True;
Bull.Position.DirectVector:=Actor1.Position.DirectVector;
Bull.Direction.DirectVector:=Actor1.Direction.DirectVector;
Bull.Up.DirectVector:=Actor1.Up.DirectVector;
end;

procedure TForm1.AsyncTimer1Timer(Sender: TObject);
begin
Bull.Move(HK_MP5_Speed);
end;



Теперь грабли :)
1. Как видите все-таки пришлось передавать вектор Up. Если этого не сделать,то GLScene неверно изобразит пулю при некоторых параметрах введенного Direction и своего Up.
2. Вообще в идеале - актер бежит, а лепит его оружие. Могут появиться такие случаи когда актер бежит в одну сторону, а стреляет в другую. Как это сделать не спрашивайте! По идее будет два Direction"a - направление актера+направление ствола относительно актера. Их как-то на будет складывать. В GLScene есть куча всяких процедур, но какая что делает не понятно.
3. Начальная позиция пули - :) Нужно будет вычислять. Position актера+Position ствола относительно актера+смещение ствола. Как - не знаю.
4. Как создавать пули в runtime - тоже не знаю.

Напоследок:
Установить объект в точку
Bull.Position.SetPoint(0,0,0);
Задать направление
Test2.Direction.SetVector(0,0,1);


 
scout   (2003-03-28 17:53) [22]

Тоесть идеального(или почти идеального) способа нет?


 
Alek Aaz   (2003-03-29 15:27) [23]

2scout То есть? Что такое идеальный способ? Вопросы 2-4 нужно решить. Принцип я знаю, но в коде это обкатать пока некогда...


 
scout   (2003-03-29 19:14) [24]

Ну я всё опробовал всё пошло и глюков каторые ты называл пока я не заметил, ТОЛЬКО: при работе Timer в GLScene после каждого срабатывания оного сцена как бы подвисает, а таймера работает достаточно часто. Также при установки таймира близком к 20 сцена вообще виснет, но действия все происходят, тоесть пуля летит!!!



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

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

Наверх





Память: 0.5 MB
Время: 0.015 c
3-3726
dez
2003-09-12 18:01
2003.10.02
Сохранение данных


14-4081
michael
2003-09-14 23:10
2003.10.02
Помогите начинающему в C++ с перезагрузкой операций


8-4004
zumozzz
2003-06-04 07:18
2003.10.02
Тамагочи


14-4088
Knight
2003-09-14 00:04
2003.10.02
Кто пользовался Fatal.ru ?


6-4025
Dysan
2003-08-01 18:16
2003.10.02
Как отправить почту по smtp?





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