![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2007
Сообщений: 6
|
Перерыл весь форум, не нашел.
Объект должен делать движение из одной задаваемой точки в другую (это-то не проблема), но при этом должен делать один оборот вокруг своей оси. Задача, вроде бы, простая, но он, зараза, у меня не останавливается, а продолжает вращение. if(cl._rotation < 361) {cl._rotation += 36;} else {cl._rotation = 0;} |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 162
|
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 6
|
Вращение получается строго одноразовое в таком случае, т.е. при следующем движении в контрольную точку объект cl уже не вращается. Вот полный код:
var Sym1x = sym1._x; var Sym2x = sym2._x; var Sym3x = sym3._x; // горизонтальные позиции точек
var Sym1y = sym1._y; var Sym2y = sym2._y; var Sym3y = sym3._y; // вертикальные позиции точек
var posx = 100; var posy = 100; // Начало движения объекта
var speed = 0.1; // скорость
var grad:Number = 0;
sym1.onRollOver = function ():Void {posx = Sym1x; posy = Sym1y;}
sym2.onRollOver = function ():Void {posx = Sym2x; posy = Sym2y;}
sym3.onRollOver = function ():Void {posx = Sym3x; posy = Sym3y;}
onEnterFrame = function ():Void
{
cl._rotation = grad;
grad += 36;
if (grad>=360){cl._rotation = 0; delete cl.onEnterFrame;}
if (cl._x < posx && cl._y < posy)
{
dis = Math.abs(posx - cl._x); cl._x += dis*speed;
dis = Math.abs(posy - cl._y); cl._y += dis*speed;
}
else if (cl._x > posx && cl._y > posy)
{
dis = Math.abs(posx - cl._x); cl._x -= dis*speed;
dis = Math.abs(posy - cl._y); cl._y -= dis*speed;
}
else if (cl._x > posx && cl._y < posy)
{
dis = Math.abs(posx - cl._x); cl._x -= dis*speed;
dis = Math.abs(posy - cl._y); cl._y += dis*speed;
}
else if (cl._x < posx && cl._y > posy)
{
dis = Math.abs(posx - cl._x); cl._x += dis*speed;
dis = Math.abs(posy - cl._y); cl._y -= dis*speed;
}
}
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
greenmoon, отредактируйте свои посты и оформите код тегами [code][/code].
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 6
|
исправил сразу же, как увидел свой прокол
|
|
|||||
|
Регистрация: Sep 2006
Сообщений: 32
|
за время, когда идет перемещение от одной точки к другой, объект должен повернуться ровно на 360 градусов?
__________________
http://www.free-lance.ru/users/goarcade |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 6
|
Да. В принципе, если эта переменная будет задаваться - это не плохо, но это я уже сам вполне приконструлячу =))
|
|
|||||
|
Регистрация: Sep 2006
Сообщений: 32
|
rotation = 360*t;
где t (значения от 0 до 1)- расстояние, пройденное объектом от начальной точки (A) к конечной точке(Б), деленное на длину отрезка АБ.
__________________
http://www.free-lance.ru/users/goarcade |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 6
|
не то
если в код впихнуть еще одну переменную, это смысла не изменит ну, добавлю я еще t, а дальше что? цикл работает 1 (один) раз, когда задается новая координата и объект перемещается, он уже второй раз не вращается - в этом задача и смысл вопроса |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 32
|
как тебе вот такой код?
![]() var target:MovieClip = sym1;
var tempTarget:MovieClip = target;
speed=0.1
t=0;posx0 = cl._x;posy0 = cl._y;posr0 = cl._rotation;
posr0 = (posr0-Math.floor(posr0/360)*360)-360;
sym1.onRollOver = function ():Void {target = this}
sym2.onRollOver = function ():Void {target = this}
sym3.onRollOver = function ():Void {target = this}
onEnterFrame = function ():Void
{
if(target!=tempTarget)
{
tempTarget=target;
t=0;posx0 = cl._x;posy0 = cl._y;posr0 = cl._rotation;
posr0 = (posr0-Math.floor(posr0/360)*360)-360;
}
t+=speed;
if(t>1)t=1;
var dx:Number = target._x-posx0;
var dy:Number = target._y-posy0;
cl._x = posx0+dx*t;
cl._y = posy0+dy*t;
cl._rotation=posr0+(360-posr0)*t;
}
__________________
http://www.free-lance.ru/users/goarcade |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|