Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Прыгучее вращение стрелки компаса (http://www.flasher.ru/forum/showthread.php?t=33051)

BMF 13.06.2002 14:59

Прыгучее вращение стрелки компаса
 
Вложений: 1
Господа, помогите пожалуйста разобраться.
Есть компас, вокруг него расположены шесть шариков.Наводишься мышкой на шарик и стрелка компаса тут же прыгает в направлении этого шарика.
Скрипт сидит в прототипе, он простой и работает, но почему-то даёт сбой.
Вот скрипт:

rotacia = -180*Math.atan2(_x-x, _y-y)/Math.PI;

// определяется направление на цель( тот самый шарик, координаты которого занесены в переменные x и y )

speed = 0.6;
_rotation += (rotacia - _rotation)/speed


//Код,который и делает то самое прыгучее движение к заданной цели


Всё просто и всё по идее должно работать.Но работает только частично.То есть шарики находящиеся на отметках 0,60,120,300 градусов работают, а 270 и 180 - нет! Особенно 180.То есть где-то вкрадывается некая ошибка а где - никак не пойму.

Кто сможет обьяснить в чём проблема?

AZart.de 13.06.2002 15:39

smotritsia ofigitelno :D
a esli prosto po kolhoznomu kajdoi knopke action napisat' tipa
_root.funkciya(60)
gde 60 - eto srazu gradus?
vsiako proshe bylo by.


a voobshe eto grabli s 4etvertiamy
tam u tebia gde-to math.abs() nehvataet.

i ishe, esli peretianut' ves' kompas v drugoi ugol, to perestaiut drugie 2 knopki pahat'.

peredavai parametr gradusom, ili radianom srazu, i ne par' sebe mozgi.
ili eto nau4naia rabota kakaya? :D

BMF 13.06.2002 16:02

Да какая там научная работа! :) Просто хотелось бы как-то элегантно решить поставленную задачку.Чтобы легко было изменить в случае чего.
Я заметил что проблема наверняка с дробями, и что где-то что-то куда-то не туда влазит.Причём если изменять значение переменной speed, то стрелка начинает вообще дурить по страшному.
Можно например скрипт изменить на такой:

rotacia = -180*Math.atan2(_x-x, _y-y)/Math.PI;
_rotation<rotacia ? accellerator++ : accellerator--;
accellerator *= 0.9;
_rotation += accellerator;


В таком случае всё работает, кроме самого нижнего шарика, который 180 градусов.На 180 стрелка начинает крутиться на месте...

AZart.de 13.06.2002 16:07

nu a s radianamy/gradusamy ne elegantno?

BMF 13.06.2002 16:20

Пробовал.
Но, то ли я не очень понимаю с чем эти градусы с радианами едят, то ли ещё что, но суть в том что если задать стрелке _rotation сразу в градусах, то до 180 она ещё доходит а потом начинается полная ерунда, то есть стрелка начинает по каким то законам складывать-вычитать углы и её вращение становится совершенно непредсказуемым.
Эх,надо было учить тригонометрию в своё время.. :(

sanitar 13.06.2002 16:24

тригонометрия мать её....:)
Замени 180 на 179.9 :)
Тригономерия хитрая вещь, но мы и её перехитрим;)

AZart.de 13.06.2002 16:26

otpravlay ee na ukazannyi gradus, a potom po utihaushei baltai vozle zadannogo zna4aniya...
doljno vrode bez problem pahat'...

ia etu trigonometriyu s ee formulami privedeniya sam nenavidel
odnu formulu toka naizust' znal, vrode sinus dvoinogo ugla... ili cosinus... hren ego znaet :-)
poishi v seti u4ebnik po algebre dlia 4ainikov :D

kstati strelka doljna _obiazatelno_ po krat4aishemu puti idti, u kompasa tak...

DMN 13.06.2002 16:28

Вроде так:

Код:

MovieClip.prototype.dot = function ()
{
rotacia = -180*Math.atan2(_x-x, _y-y)/Math.PI;
if ((rotacia-_rotation)>180) rotacia=_rotation-360+(rotacia-_rotation);
if ((rotacia-_rotation)<-180) rotacia=_rotation+360+(rotacia-_rotation);
speed = 0.6;
_rotation += (rotacia - _rotation)/speed
};


BMF 13.06.2002 16:47

2DMN:
Спасибо, мил человек! :)
Спас.Я нутром где-то чувствовал что надо проверять угол "на вшивость" но всё никак не мог понять как:)
Спасибо.Всё работает.


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

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