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

Вниз

Задание пути объекту.... (GLScene)   Найти похожие ветки 

 
Colt1978   (2004-11-01 22:31) [0]

Привет всем.... подскажите кто может сталкивался... Как заставить объект (к примеру Актёра) двигаться из текущего положения в точку указанную мышкой...
В качестве поверхности перемещения использую Terrain...
Суть в том что не могу я его направить куда надо....


 
Кто---то ©   (2004-11-03 01:58) [1]

Какая разница чем указана точка ?
Проблема с определением места в которое ткнули мышью или с перемещением ?


 
Colt1978   (2004-11-03 07:05) [2]

и с тем и другим....


 
Домовенок   (2004-11-03 09:31) [3]

Где-то в демках к GLScene есть пример работы с тайлами. Вот там можно посмотреть в какой тайл ткнули мышкой, брать его координаты, и отправлять туда героя. В принципе героя не так уж и сложно туда перемещать, придется немного подумать о том, как правильно его лицом в нужное направление развернуть.


 
Colt1978   (2004-11-03 15:26) [4]

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


 
Кто---то ©   (2004-11-05 01:34) [5]


> Colt1978   (03.11.04 07:05) [2]
> и с тем и другим....

1.
Для определения куда ткнули мышью используй функцию : GLSceneViewer1.Buffer.ScreenToWorld(x, y);
в x y впиши координаты экрана в которые тыкаешь. В качестве резултьта получишь позишн в ДжиЭльСцене.

2.
PointTo - поворачивает объет лицом к заданной позишн или объекту.
Move(расстояние *deltaTime) - двигает на указанное расстояние. deltaTime берётся из кадансера, нужна, чтобы на разных компьютерах движение было с одинаковой скоростью.


 
Colt1978   (2004-11-17 10:16) [6]

Опять я....
Вот как мне подсказали реализовать:

procedure TForm1.GLCadencerProgress(Sender: TObject; const deltaTime,
 newTime: Double);
var
  speed, z : Single;
  nmp : TPoint;

  bufv:tvector;
begin
....
actor.Position.Y:=Terrain.InterpolatedHeight(actor.Position.AsVector)+250;
bufv:=actor.Position.asvector;
bufv[1]:=mpos[1];
actor.PointTo(mpos,vectormake (0,1,0));
if vctordistance (bufv,mpos)>0.1 then actor.Move(deltatime*150);
...
  SceneViewer.Invalidate;
end;

procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var rayStart, rayVector, iPoint, iNormal : TVector;
begin
//        SetVector(rayStart, GLSphere1.AbsolutePosition);
      SetVector(rayStart, Camera.AbsolutePosition);
      SetVector(rayVector, SceneViewer.Buffer.ScreenToVector(AffineVectorMake(x, SceneViewer.Height-y, 0)));
      NormalizeVector(rayVector);
      if Terrain.RayCastIntersect(rayStart, rayVector, @iPoint, @iNormal) then
       begin
        mpos:=ipoint;
        mdir:=vectornormalize (inormal);
//         actor.PointTo(mpos,vectormake (0,1,0));
       end;
end;

Я что хочу сказать, дело в том, что я использую террайн этот , увеличиваю его в свойстве масштабирования в 16 раз, может в этом проблеммма того, что актёр движется не туда куда мне хочется. Камера у меня управляется с клавиатуры и при помощи мыщи я вращаю камеру. Мож кто поможет разобраться ?


 
Colt1978   (2004-11-17 10:36) [7]

Забыл добавить что код указанный в процедуре TForm1.GLSceneViewer1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); обрабатывается у меня когда я нажимаю левую кнопку мыши...
Код я просто не вставил...


 
Da Stranger   (2004-11-17 17:48) [8]

Интересный примет есть в \Demos\behaviours\pathcontrol по плавному передвижению по заданному пути с возможностью изменять скорость.
Кстати, кто-нибудь ещё использует glMovement?


 
Colt1978   (2004-11-18 21:35) [9]

Da Stranger   (17.11.04 17:48) [8]

Интересный примет есть в \Demos\behaviours\pathcontrol по плавному передвижению по заданному пути с возможностью изменять скорость.

Пример я помню такой, но у меня совсем не так. Теретически объект перемещается, но бывают лаги и глюки когда объект не останавливается а продолжает свой путь.
Видишь ли в том примере путь чётко задан, а тут задаю я его сам мышкой. 2-х мерные координаты преобразуются в 3-х мерные. Возможно что я просто что-то напутал именно с координатами, но понять что я уже не всилах... :-(


 
Домовенок   (2004-11-21 00:44) [10]

>Colt1978 (18.11.04 21:35) [9]

Дык ты его двигай до конкретной координаты не пока он будет равен ей, а проверяй равен или ушел дальше. Тогда тормози. Если зашел чуть дальше, совсем чуть-чуть, то наверное ничего страшного? А такое бывает иногда.


 
Colt1978   (2004-11-22 06:23) [11]


> Домовенок   (21.11.04 00:44) [10]
что я только не пробывал... ничего не получается.


 
dimodim-modern   (2004-11-22 10:32) [12]

Прикольно...Пашет


 
Colt1978   (2004-11-22 12:09) [13]


> dimodim-modern   (22.11.04 10:32) [12]

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


 
Da Stranger   (2004-11-22 17:56) [14]


> Видишь ли в том примере путь чётко задан, а тут задаю я
> его сам мышкой. 2-х мерные координаты преобразуются в 3-х
> мерные. Возможно что я просто что-то напутал именно с координатами,
> но понять что я уже не всилах... :-(

Получить 3х мерные координаты из 2- мерных можно функцией Camera.xxx.ScreentoWorld, а потом найти пересечение прямой (Camera.position--- эта точка) с плоскостью XY на высоте этой точки.
Получившаяся точка и будет пунктом назначения.
Звучит сложновато, но проше не умею ;)


 
Colt1978   (2004-11-23 06:26) [15]


> Da Stranger   (22.11.04 17:56) [14]

а как это выглядит ввиде кода ?


 
Da Stranger   (2004-11-23 16:40) [16]

Посмотри на это...
Актёр движется, но направление не сохраняет. Завтра, может, выложу усовершенствованную версию.
http://xgb.boom.ru/temp/xxx.zip


 
Colt1978   (2004-11-24 06:43) [17]


> Da Stranger   (23.11.04 16:40) [16]
> Посмотри на это...

нет там ничего...


 
Colt1978   (2004-11-24 06:43) [18]


> Da Stranger   (23.11.04 16:40) [16]
> Посмотри на это...

нет там ничего...



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

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

Наверх




Память: 0.49 MB
Время: 0.045 c
3-1106404347
sloug
2005-01-22 17:32
2005.02.20
есть код программы


14-1106814518
КаПиБаРа
2005-01-27 11:28
2005.02.20
Была вроде функция, да забыл как называется,


14-1106650775
syte_ser78
2005-01-25 13:59
2005.02.20
Epson stylus Color 300


14-1106519472
GanibalLector
2005-01-24 01:31
2005.02.20
Харьков...встреча


1-1107753842
Kerk
2005-02-07 08:24
2005.02.20
Насколько это корректно?





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