flash as3 физическая проблема весны - PullRequest
0 голосов
/ 04 апреля 2011

Я хочу сделать весеннюю программу as3, эффект такой: ссылка

после некоторых исследований и примеров, моя программа здесь:

public class testing_2 extends MovieClip
{
    //--------------declare variables
    private var xdif:Number;
    private var ydif:Number;
    private var xvel:Number = 0;
    private var yvel:Number = 0;

    private var totalNum:Number = 3;
    private var d:Number = 20;
    private var springArray:Array = [];

    public function testing_2()
    {
        //-------------init stuffs
        init_mc();
        init_event();
    }

    private function init_mc()
    {
        for (var i:Number = 0; i < totalNum; i++)
        {
            var mc:MovieClip = new box()  ;
            mc.num = i;
            springArray.push(mc);
            addChild(mc);
            //mc.x = stage.stageWidth/2;
            //mc.y = stage.stageHeight/2 + i*d;
        }
    }

    private function init_event()
    {
        this.addEventListener(Event.ENTER_FRAME, spring);
    }

    //-------------own functions
    function spring(e)
    {
    for (var i:Number = totalNum-1; i >= 0; i--){

        xdif = mouseX - springArray[i].x;
        ydif = mouseY - springArray[i].y;


        xvel +=  xdif * (0.4);
        yvel +=  ydif * (0.4);


        xvel *=  (0.8);
        yvel *=  (0.8);


        springArray[i].x +=  xvel ;
        springArray[i].y +=  yvel ;

        }
    }

это не удачная программа, поскольку шары не могут разделиться на определенном расстоянии, и когда шары катятся, они находятся на одной круговой траектории и не могут достичь эффекта, подобного ссылке на веб-сайте. Я думаю, что это проблема этих xdif = mouseX - springArray[i].x; ydif = mouseY - springArray[i].y;, но я не могу указать, в чем проблема.

Кто-нибудь может помочь? большое спасибо.

1 Ответ

1 голос
/ 04 апреля 2011

В вашем коде каждый шарик имеет одинаковое поведение, так как нет изменений между двумя итерациями в цикле for. Вы должны попробовать что-нибудь, где первый шар относится к мышке, второй - к первому, третий - ко второму ...

for (var i:Number = 0; i < totalNum; i++){
    if (i == 0)
    {
        xdif = mouseX - springArray[i].x;
        ydif = mouseY - springArray[i].y;
    } else
    {
        xdif = springArray[i-1].x - springArray[i].x;
        ydif = springArray[i-1].y - springArray[i].y;
    }

    ...
...