Линия, чтобы не работать должным образом - PullRequest
0 голосов
/ 18 мая 2011

У меня проблемы с моим кодом или чем-то ... дело в том, что я использую lineTo от координат одного объекта к координатам другого, но не важно, где второй объект - это линия, всегда куда-то в случайном направлениив левом нижнем углу, и я застрял.

вот код:

        var spr:Shape = new Shape();
        spr.graphics.clear();
        spr.graphics.lineStyle(2,0xffffff);
        spr.x = latM[1].x;
        spr.y = latM[1].y;
        spr.graphics.lineTo(latM[0].x,latM[0].y);
        trace("latM[0].x = "+latM[0].x+"\tlatM[0].y = "+latM[0].y+
              "\nlatM[1].x = "+latM[1].x+"\tlatM[1].y = "+latM[1].y);
        spr.graphics.lineTo(latM[0].x,latM[0].y);
        addChild(spr);

после нескольких попыток я обнаружил, что все линии указывают [писал по ошибке наклоняются] книжний левый TT_TT ..

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Я предполагаю, что latM [1] и latM [0] - это две фигуры, между которыми вы пытаетесь провести линию. Если это так, вы заметили, что у вас есть две линии, чтобы идти в одну точку?

Что вам нужно.

spr.graphics.moveTo(latM[0].x, latM[0].y);
spr.graphics.lineTo(latM[1].x, latM[1].y);

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

package src 
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite
    {
        private var obj1:Sprite = new Sprite();
        private var obj2:Sprite = new Sprite();
        private var lineSprite:Sprite = new Sprite();

        // for testing your line.
        // we don't really need it for this prototype however it
        // is being used since this is how your accessing your Objects.
        private var latM:Array = [];

        public function Main() 
        {
            addEventListener(Event.ADDED_TO_STAGE, initMain);
        }

        private function initMain(e:Event):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, initMain);

            obj1.graphics.lineStyle(1, 0);
            obj1.graphics.beginFill(0xccccff);
            obj1.graphics.drawCircle(0, 0, 20);
            obj1.graphics.endFill();
            obj1.x = 100;
            obj1.y = 100;

            obj2.graphics.lineStyle(1, 0);
            obj2.graphics.beginFill(0xffcccc);
            obj2.graphics.drawCircle(0, 0, 20);
            obj2.graphics.endFill();
            obj2.x = 400;
            obj2.y = 200;

            // for testing your line.
            latM.push(obj1, obj2);

            addChild(obj1);
            addChild(obj2);
            addChild(lineSprite);

            addEventListener(Event.ENTER_FRAME, handleEnterFrame);
        }

        private function handleEnterFrame(e:Event):void 
        {
            // this will clear and redraw the line between the two sprites
            // every frame and thus always be up to date.
            lineSprite.graphics.clear();
            lineSprite.graphics.lineStyle(2, 0xff0000);
            lineSprite.graphics.moveTo(latM[0].x, latM[0].y);
            lineSprite.graphics.lineTo(latM[1].x, latM[1].y);

            //obj1.x++; // uncomment this line and you can watch it move and keep the line perfect.
        }

    }

}
0 голосов
/ 18 мая 2011

Что вы имеете в виду, наклонитесь к нижнему левому углу?
Вы можете только нарисовать прямую линию с линией.
"lineTo" идет только от текущей точки к точке, установленной через ее параметры.
Функция moveTo будет перемещать точку без рисования.
Следующий код нарисует прямоугольник 100 X 100

var spr:Shape = new Shape();
spr.graphics.clear();
spr.graphics.lineStyle(2,0xff00ff);
spr.graphics.moveTo(0,0);
spr.graphics.lineTo(0,100);
spr.graphics.lineTo(100,100);
spr.graphics.lineTo(100,0);
spr.graphics.lineTo(0,0);
addChild(spr);
...