![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 70
|
Добрый день!
Пользовался поиском, но ничего не нашел подходящего. Так вот: Есть объект на сцене, с координатами x=100; y=100; (это к примеру) и есть Point(300, 250); В конце движения объект начинает дрыгаться (как бы 2 последним "кадра" зацикливаются) Или же есть какие-нибудь другие способы? Вот док который у меня private function move():void { if (gotoPoint != null || currPoint != gotoPoint) { currPoint = new Point(this.x, this.y); trace(Point.distance(currPoint, gotoPoint)); var angle:Number = Math.atan2(gotoPoint.y - currPoint.y, gotoPoint.x - currPoint.x); if (Point.distance(currPoint, gotoPoint) > 0) { this.x += _moveSpeed * Math.cos( angle ); this.y += _moveSpeed * Math.sin( angle ); } else { currPoint = gotoPoint; } } |
|
|||||
|
Там 0 никогда не получится. А иногда будут такие числа, которые вообще далеки от нуля. Объект не будет останавливаться.
Вариант лучше - расчитывать суммарное расстояние между всеми точками пути, и при каждом перемещении объекта проверять сколько непройденного пути еще осталось. Т.е. при каждом перемещении объекта, скажем на 2 пикселя, отнимать эти два пикселя от общего пути. И когда он будет <= 0 останавливать объект Этот способ намного надежнее |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 70
|
не очень понял... можете примерчик кода?
|
|
|||||
|
Регистрация: May 2011
Сообщений: 221
|
Ноль то получиться может, то только для этого нужно очень строго рассчитывать шаг перемещения, при том, правда, что для каждого угла, вероятно он будет разный. Можно поступить следующим образом: проверять не стала ли дистанция между точками меньше шага перемещения (в вашем случае это _moveSpeed), если дистанция меньше – то приравнять координаты объекта, координатам поинта. Логика простая – ваш объект при таком условии при попытке «перешагнуть» точку будет отправлен точно туда, где ему нужно быть.
|
|
|||||
|
Регистрация: Apr 2012
Сообщений: 70
|
2Фенёк, спасибо большое
2caseyryan, а можно какой-нибудь примерчик реализации логики, предлагаемой вами? |
|
|||||
|
Регистрация: May 2011
Сообщений: 221
|
Поясните еще раз суть вашего метода. Насколько я его понял – необходимо рассчитать длину пути от начальной точки до конечной, а потом каждый шаг отсчитывать сколько процентов от необходимого пути пройдено.
По сути это ведь задача о столкновении двух точек, соотвественно нужно узнать принадлежит ли точка (коннечная) отрезку (траектории движения). Учитывая то, что движени происходит по прямой, достаточно узнать, что координаты точки лежат между координатами отрезка. Соотвественно если расстояние между точками меньше шага перемещения, это значит, что следующий шаг перенесет объект либо за точку, либо на нее. За точку нам точно не надо, по этому ставим объект на нее. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:47. |
|
|
« Предыдущая тема | Следующая тема » |
|
|