Форум 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=99022)

greenmoon 26.07.2007 17:13

остановка вращения
 
Перерыл весь форум, не нашел.
Объект должен делать движение из одной задаваемой точки в другую (это-то не проблема), но при этом должен делать один оборот вокруг своей оси. Задача, вроде бы, простая, но он, зараза, у меня не останавливается, а продолжает вращение.

if(cl._rotation < 361) {cl._rotation += 36;}
else {cl._rotation = 0;}

CGandA 26.07.2007 17:25

Код:

var grad:Number = 0;
cl.onEnterFrame = function() {
        this._rotation = grad;
        grad += 36;
        if (grad>=360) {
                this._rotation = 0;
                delete this.onEnterFrame;
        }
};


greenmoon 26.07.2007 17:37

Вращение получается строго одноразовое в таком случае, т.е. при следующем движении в контрольную точку объект 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;
        }
}


etc 26.07.2007 17:39

greenmoon, отредактируйте свои посты и оформите код тегами [code][/code].

greenmoon 26.07.2007 17:44

исправил сразу же, как увидел свой прокол

goarcade 26.07.2007 18:13

за время, когда идет перемещение от одной точки к другой, объект должен повернуться ровно на 360 градусов?

greenmoon 26.07.2007 18:18

Да. В принципе, если эта переменная будет задаваться - это не плохо, но это я уже сам вполне приконструлячу =))

goarcade 26.07.2007 20:20

rotation = 360*t;
где t (значения от 0 до 1)- расстояние, пройденное объектом от начальной точки (A) к конечной точке(Б), деленное на длину отрезка АБ.

greenmoon 26.07.2007 22:14

не то
если в код впихнуть еще одну переменную, это смысла не изменит
Код:

        cl._rotation = grad;
        grad += 36;
        if (grad>=360){cl._rotation = 0; delete cl.onEnterFrame;}

ну, добавлю я еще t, а дальше что? цикл работает 1 (один) раз, когда задается новая координата и объект перемещается, он уже второй раз не вращается - в этом задача и смысл вопроса

goarcade 26.07.2007 23:37

как тебе вот такой код?:)
Код:

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;
}



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

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