![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
Сделал старым дедовским способом перемещение по массиву точек. Но на каждой точке объект почему-то подтормаживается и движение получается дёрганым. Проверял FPS, всё норм.
Вот собственно функция перемещения (по событию ENTER_FRAME): private function moveMonster(event:Event):void { if(distToCurPt() > thres) { this.x += xVel; this.y += yVel; } else { if(tgPoint < pathArray.length-1) { tgPoint+=1; var dir:Number = Math.atan2(pathArray[tgPoint].y - this.y,pathArray[tgPoint].x - this.x); xVel = Math.cos(dir)*speed; yVel = Math.sin(dir)*speed; this.rotation = dir/Math.PI*180; } else { removeEventListener(Event.ENTER_FRAME, moveMonster); } } } В чём может быть причина? Последний раз редактировалось Parez; 27.11.2011 в 23:42. |
|
|||||
|
Что это такое?
Такое впечатление что она двигается не каждый кадр, а через один-два кадра. (чтобы понять нужно увидеть процедуру distToCurPt() ) Если это действительно так то нужно пересмотреть логику так чтобы объект двигался каждый кадр в любом случае, а вот расстояние варьировалось при надобности. Добавлено через 49 секунд Или точек добавить.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
Вот функция distToCurPt (вычисляет расстояние от текущего положения до целевой точки):
private function distToCurPt():Number { var dist:Number = Point.distance(new Point(this.x,this.y),pathArray[tgPoint]); return dist; } Цитата:
И да, если попробовать нарисовать просто длинную прямую линию, движение будет гладким. Торможение происходит только на поворотах... Последний раз редактировалось Parez; 28.11.2011 в 00:27. |
|
|||||
|
Цитата:
Следует не разделять это а делать одновременно. Потому что там где есть поворот не происходит движение и объект затормаживает для того чтобы повернуться. Но погрешности появятся я думаю. Он углы срезать начнет и в таком духе, но думаю это не критично.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
О, спасибо большое. Я как-то об этом даже не подумал. Дописал две строчки:
private function moveMonster(event:Event):void { if(distToCurPt() > thres) { this.x += xVel; this.y += yVel; } else { if(tgPoint < pathArray.length-1) { tgPoint+=1; var dir:Number = Math.atan2(pathArray[tgPoint].y - this.y,pathArray[tgPoint].x - this.x); xVel = Math.cos(dir)*speed; yVel = Math.sin(dir)*speed; this.rotation = dir/Math.PI*180; //Вот эти заветные 2 строчки: this.x += xVel; this.y += yVel; } else { removeEventListener(Event.ENTER_FRAME, moveMonster); } } } |
|
|||||
|
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
Не скажите... Можно разве что изменить немного структуру if/then/else, но суть от этого не изменится.
private function moveMonster(event:Event):void { if(distToCurPt() < thres) { if(tgPoint < pathArray.length-1) { tgPoint+=1; var dir:Number = Math.atan2(pathArray[tgPoint].y - this.y,pathArray[tgPoint].x - this.x); xVel = Math.cos(dir)*speed; yVel = Math.sin(dir)*speed; this.rotation = dir/Math.PI*180; } else { removeEventListener(Event.ENTER_FRAME, moveMonster); } } this.x += xVel; this.y += yVel; } |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|