Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Движение одного объекта по направлению к другому (http://www.flasher.ru/forum/showthread.php?t=134152)

Angelinka 22.12.2009 20:34

Движение одного объекта по направлению к другому
 
Здравствуйте!
Ребята, подскажите пожалуйста, как мне сделать так, чтобы один объект двигался по направлению к другому с одной скоростью?
Я делаю так:
_x = _x+((ДРУГОЙ_ОБЪЕКТ._x-_x)/20);
_y = _y+((ДРУГОЙ_ОБЪЕКТ._y-_y)/20);
Это работает, но проблема в том, что движение моего объекта ко второму постепенно замедляется. Получается что он разбегается, а потом приостанавливается. В общем получается, что чем ближе мой объект к другому - тем медленнее он движется. А мне нужно чтобы объект двигался с одинаковой скоростью все время.
Будьте добры, подскажите как такое осуществить...
Заранее большое спасибо!

VVall 22.12.2009 20:40

Надо нормализовать вектор и умножить его на требуемую скорость движения.

udaaff 22.12.2009 21:09

Код AS1/AS2:

onEnterFrame = onEnterFrameHandler;
var v:Number = 5;
 
function onEnterFrameHandler():Void
{
        var dx:Number = _xmouse - mc._x;
        var dy:Number = _ymouse - mc._y;
        var l:Number = Math.sqrt(dx * dx + dy * dy);
        var rad:Number = Math.atan2(dy, dx);
 
        mc._x += v * Math.cos(rad)
        mc._y += v * Math.sin(rad);
        mc._rotation = 180 * rad / Math.PI;
}


VVall 22.12.2009 21:16

atan2, sin и cos здесь лишние. Достаточно поделить dx и dy на l (собственно нормализация вектора) и умножить на скорость.

udaaff 22.12.2009 21:25

Лишние, если убрать вращение.

Angelinka 22.12.2009 23:15

Спасибо, но есть проблемка.
1. Когда объект достигает своей цели - он начинает хаотично дергаться.
2. Я не понимаю, зачем мы определяем переменную l если мы ее не используем даже..
Спасибо.

udaaff 22.12.2009 23:56

1. Оставливайте объект, чтобы не дергался.
2. Ну уберите ее )

Angelinka 23.12.2009 00:11

Ну понятно в целом. Больше Вам спасибо!


Часовой пояс GMT +4, время: 19:52.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.