1

AS3を使用しています。しかし、私がどの言語を使用しているかは問題ではありません。この問題を解決する方法についてのロジックを見つけているところです。

線の始点と終点を指定して、グラフィックス クラスで描画し、線を作成しました。今、私は再び円を描きます。その円が線を横切るようにしたい。

座標平面の線の始点と終点の間の点を知ることで、それを行うことができます。

たとえば.. (0,0) と (20,20)

これでオブジェクトの値を割り当てることで、ラインをトラバースできます...

object.x = 5;
object.y = 5;
object.x = 10;
object.y = 10;
and so on and so forth..

オブジェクトの円が始点から終点まで行き来し、線を横断しながら再び始点に戻るようにします。

これで私を助けることができる式はありますか?線を横切るために勾配を差し引いて追加しようとしましたが、勾配が正の場合にのみ機能します。

注: フラッシュでは、座標系は通常のデカルト平面とは異なります。第 4 象限はすべてポジティブです。

これが私の現在のロジックです:

var speed:int = 10;

function makeItMove(packetNumber:int):void{
        var xcenter:int = xCenterPt[packetNumber];
        var ycenter:int = yCenterPt[packetNumber];
        var xfirst:int = xFirstPt[packetNumber];
        var yfirst:int = yFirstPt[packetNumber];
        var xsecond:int = xSecondPt[packetNumber];
        var ysecond:int = ySecondPt[packetNumber];
        var switchPath:Boolean = switchPathArr[packetNumber];
        var slope:int = 0;

        if((xsecond-xfirst) != 0){
            slope = ((ysecond - yfirst)/(xsecond - xfirst)) * speed;
        }

        if(slope<0){
            //slope = ((ysecond - yfirst)/(xsecond - xfirst)) * speed;
            slope = slope * -1;
        }
        //else if(slope)

        //trace("PacketNumber: "+packetNumber+", xcenter: "+xcenter+", ycenter: "+ycenter+", xfirst: "+xfirst+", yfirst: "+yfirst+", xsecond: "+xsecond+", ysecond: "+ysecond)
        if(xcenter <= xfirst && ycenter <= yfirst){
            switchPath = true;
            switchPathArr[packetNumber] = switchPath;
        }

        if(xcenter >= xsecond && ycenter >= ysecond){
            switchPath = false;
            switchPathArr[packetNumber] = switchPath;
        }

        if(switchPath){
            xcenter = xcenter+slope;
            ycenter = ycenter+slope;
            xCenterPt[packetNumber] = xcenter;
            yCenterPt[packetNumber] = ycenter;
            //trace("UP: xcenter = " + xcenter + ", ycenter = " + ycenter);
            this[mc_Packets[packetNumber]].x = xcenter;
            this[mc_Packets[packetNumber]].y = ycenter;
        }
        else{
            xcenter = xcenter-slope;
            ycenter = ycenter-slope;
            xCenterPt[packetNumber] = xcenter;
            yCenterPt[packetNumber] = ycenter;
            //trace("DOWN: xcenter = " + xcenter + ", ycenter = " + ycenter);
            this[mc_Packets[packetNumber]].x = xcenter;
            this[mc_Packets[packetNumber]].y = ycenter;
        }
    }
4

2 に答える 2

0

数学的に解くよりも tweenLike API を使用した方がよいでしょう。

ここにリンクがあります:

http://www.greensock.com/tweenlite/

于 2013-05-16T10:23:05.647 に答える