Форум: "Игры";
Текущий архив: 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.027 c