Вопрос связанный с Lua
|
|
ximximik | Дата: Суббота, 01.01.2011, 14:20 | Сообщение # 1 |
Краб
Группа: Проверенные
Сообщений: 247
Награды: 27 +
Статус: Offline
| Итак, имеем задачу. Известны координаты некой точки. Точка находится над землей, у самого верха карты. Как только луч из этой точки, опущенный перпендикулярно земле, пересекает её, нужно записать в переменную координаты точки пересечения. Делается вроде как с Cast***Ray. Но я не знаю каким именно. Или MovePointToGround. Прошу помочь.
|
|
| |
Mad_Alex | Дата: Суббота, 01.01.2011, 15:06 | Сообщение # 2 |
Краб
Группа: Главный Администратор
Сообщений: 735
Награды: 32 +
Статус: Offline
| Цикл for с функцией CastObstacleRay в теле цикла.
|
|
| |
ximximik | Дата: Суббота, 01.01.2011, 15:20 | Сообщение # 3 |
Краб
Группа: Проверенные
Сообщений: 247
Награды: 27 +
Статус: Offline
| Спасибо, но я обошелся и без цикла.
Сообщение отредактировал ximximik - Суббота, 01.01.2011, 15:38 |
|
| |
Raseri | Дата: Суббота, 01.01.2011, 15:52 | Сообщение # 4 |
Краб
Группа: Добрый Модератор
Сообщений: 208
Награды: 18 +
Статус: Offline
| Так написал бы, как задачу решил =\ В общем, вот: Code local vectortoactor = actor.Pos - enemypos; -- тут понятно, в общем, вектор до вражеского актора if vectortoactor.Magnitude < 1500 then -- если расстояние до него меньше этого local startpos = enemypos + Vector(vectortoactor.X / vectortoactor.Magnitude * 15 , vectortoactor.Y / vectortoactor.Magnitude * 15); -- хитрый матан local k = SceneMan:CastMORay(startpos , vectortoactor , 0 , 0 , false , 4); -- собственно, нужная функция local thingie = MovableMan:GetMOFromID(k); -- с имеющегося ИД-шника имеем объект if thingie ~= nil then -- если объект вообще существует local l = MovableMan:GetMOFromID(thingie.RootID); -- ищем, чему принадлежит этот объект if l.PresetName == 'Dummy' then -- в данном случае, если дамми, то тогда <чето-там вобщем делаем> end end end Это так, в более общем виде.
|
|
| |
ximximik | Дата: Суббота, 01.01.2011, 15:58 | Сообщение # 5 |
Краб
Группа: Проверенные
Сообщений: 247
Награды: 27 +
Статус: Offline
| Dantalion13, Ууу, как сложно. Не, у меня проще получилось. Добавлено (01.01.2011, 15:58) --------------------------------------------- Можно сказать, что я неточно выразился. Мне надо было узнать, если препятствия над актором сверху (земля, корабли). Для этого мне и нужна была точка пересечения с землей. Но я проще сделал. Но тоже используя CastObstacleRay .
|
|
| |
Raseri | Дата: Суббота, 01.01.2011, 16:19 | Сообщение # 6 |
Краб
Группа: Добрый Модератор
Сообщений: 208
Награды: 18 +
Статус: Offline
| Так напиши свой вариант =) Другим людям это полезно будет =) Да и мне интересно ^^
|
|
| |
ximximik | Дата: Суббота, 01.01.2011, 16:27 | Сообщение # 7 |
Краб
Группа: Проверенные
Сообщений: 247
Награды: 27 +
Статус: Offline
| Code self.bx = actor.Pos.X; self.by = actor.Pos.Y; self.xy = SceneMan:CastObstacleRay(Vector(self.bx, 0), Vector(0, self.by), self.vector1, self.vector2, actor.ID, 0, 1); В итоге этого кода, если над объектом ничего нет, то self.vector2 укажет почти на него (несколько сотых неточности). Если есть, то self.vector2.Y будет меньше self.by.
Сообщение отредактировал ximximik - Суббота, 01.01.2011, 16:28 |
|
| |