Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   поступательное движение(2d) (http://www.flasher.ru/forum/showthread.php?t=211354)

Bazel 11.08.2015 16:39

Вложений: 1
Проблема в следующем, что имеем 2 многоугольника, у одного скорость 0.5, у второго 1. На деле имеем что движутся они с одинаковой скоростью


код элементарный,

Код AS3:

public function MoveBody (object:DisplayObject, t : Number ):void // перемещаем центр спрайта не апдейтя его вершин
{
 
        trace("object.x0=",object.x);
        object.x+=Vx;
        trace("object.x1=",object.x);
}

везде типы Number почему округляется не пойму

вот свф

tattori 11.08.2015 17:01

я так понял Vx это и есть скорость, но не вижу в этом коде где это переменная определяется или изменяется что бы понять в чем дело, и для чего нужна переменная "t" ?

Добавлено через 35 секунд
может вместо Vx ты хотел написать именно t

Bazel 11.08.2015 17:03

Да, Vx скорость, переменная t не нужна я удалил весь лишний код, чтобы максимально наглядно было, Vx постоянная

callme 11.08.2015 17:12

Проблема не с этим кодом, а в другом месте.

Bazel 11.08.2015 17:17

ммм, да вроде напортачить тут сложно. Просто вызываем функцию перемещения через некоторое время и все. И если скорость сделаем 1.5 и 1 тогда 1 многоугольник побежит быстрее а вот если 0.5 и 1 то оба движутся одинаково.

tattori 11.08.2015 17:34

так где ты указываешь скорость?

Добавлено через 1 минуту
если Vx постоянная то получается для всех одна и та же скорость будет

callme 11.08.2015 17:38

Упрощайте свой код пока не найдёте ошибку.

Вот работающий пример, может поможет.
Код AS3:

package
{
    import flash.display.DisplayObject;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            _shape1 = new Shape();
            _shape2 = new Shape();
 
            _shape1.graphics.beginFill(0);
            _shape1.graphics.drawRect(0, 0, 100, 100);
 
            _shape2.graphics.beginFill(0);
            _shape2.graphics.drawRect(0, 0, 100, 100);
            _shape2.y = 200;
 
            addChild(_shape1);
            addChild(_shape2);
 
            addEventListener(Event.ENTER_FRAME, enterFrame);
        }
 
        private function enterFrame(e:Event):void
        {
            Vx = 0.5;
            moveBody(_shape1);
 
            Vx = 1;
            moveBody(_shape2);
        }
 
        private function moveBody(object:DisplayObject):void
        {
            object.x += Vx;
        }
 
        private var _shape1:Shape;
        private var _shape2:Shape;
 
        private var Vx:Number;
    }
}


tattori 11.08.2015 17:38

с этим кусочком кода сложно что либо сказать))

Bazel 11.08.2015 17:56

Вложений: 1
мм сейчас буду рыться в своем коде. Решение отпишу если найду.
У меня 2 класса, в каждом хранятся свои скорости.

Добавлено через 12 минут
ошибка найдена ! т.к. у меня две функции вызываются, сначала сдвига а потом поворота.Я закомментил функцию поворота и все заработало как надо. Но теперь нужно подружить эти две функции

вот функция поворота

Код AS3:

public function pointRotate(object:DisplayObject, center:Point, angle:Number) : void
    {
        /* * * * * * * * * *
*                  *
*  @author wolsh  *
*                  *
\* * * * * * * * * */

 
        // return to zero
        angle += object.rotation;
        var a0:Number = - object.rotation * Math.PI / 180;
        var s0:Number = Math.sin(a0);
        var c0:Number = Math.cos(a0);
        var dX0:Number = object.x - center.x;
        var dY0:Number = object.y - center.y;
 
        object.rotation = 0;
        object.x = Math.round(center.x + dX0 * c0 - dY0 * s0);
        object.y = Math.round(center.y + dX0 * s0 + dY0 * c0);
 
        // new rotation
        var r:Number = angle * Math.PI / 180;
        var s:Number = Math.sin(r);
        var c:Number = Math.cos(r);
        var dX:Number = object.x - center.x;
        var dY:Number = object.y - center.y;
 
        object.rotation += angle;
        object.x = center.x + dX * c - dY * s;
        object.y = center.y + dX * s + dY * c;
    }

Добавлено через 34 минуты
поясню в чем суть проблемы. У нас 2 многоугольника ударяются друг об друга. Все замечательно, все обсчитывается правильно, но просто спрайт съзжает с вершин к которым прикреплен при малых скоростях.

вот наглядно показывает это, подождите секунд 30 и увидите где вершины а где сам спрайт

мне нужно чтобы спрайт вращался и перемещался адекватно.

банально и просто, вращаться он может. Перемещаться тоже при малой скорости. А вот вместе повернуться и переместиться у него не получается нормально.


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

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