Форум Flasher.ru

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

Riki 17.01.2013 00:55

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



Уже битых 2 часа маюсь, но не могу сделать, хелпаните)

bav 17.01.2013 01:07

Пользуйтесь методами класса Graphics (moveTo, lineTo и т.д). При клике запоминаем очередную точку. На MOUSE_MOVE вешаем слушатель, в котором отрисовываем линии между сохраненными точками и последнюю линию ведем к текущим координатам курсора.

GBee 17.01.2013 01:08

А что уже сделали?
Тут над схитрить и использовать два слоя - временный для перерисовки линии и основной, где идет фиксация рисунка.

bav 17.01.2013 01:12

Да, GBee дело говорит, совершенно незачем каждый раз отрисовывать все линии.

Riki 17.01.2013 01:24

Вот главный вопрос, это как мне различить, мувиклипы, добавленные таким образом:
Код AS3:

function MouseDown(e:MouseEvent):void
{
        var mc:Symbol = new Symbol();
        addChild(mc);
        mc.x = mouseX;
        mc.y = mouseY;
}

Я пытался как-то использовать mc.name. Но как бы используя его загнать эти mc в массив, я не знаю.

Zebestov 17.01.2013 01:38

Вот можно посмотреть:

Код AS3:

import flash.events.MouseEvent;
import flash.geom.Point;
import flash.display.Shape;
import flash.display.Sprite;
 
var pointFrom:Point;
var pointTo:Point = new Point();
 
var layerBackground:Sprite = new Sprite();
var layerCanvas:Shape = new Shape();
var layerDraw:Shape = new Shape();
 
layerBackground.graphics.beginFill(0xffffff);
layerBackground.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
layerBackground.graphics.endFill();
 
addChild(layerBackground);
addChild(layerCanvas);
addChild(layerDraw);
 
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
 
function onMouseDown(event:MouseEvent):void
{
        if (!pointFrom)
        {
                pointFrom = new Point(event.stageX, event.stageY);
        }
 
        addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
 
function onMouseMove(event:MouseEvent):void
{
        pointTo.x = event.stageX;
        pointTo.y = event.stageY;
 
        redrawNewLine();
}
 
function onMouseUp(event:MouseEvent):void
{
        addNewLine();
 
        pointFrom.x = pointTo.x;
        pointFrom.y = pointTo.y;
 
        removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
 
function redrawNewLine():void
{
        layerDraw.graphics.clear();
        layerDraw.graphics.lineStyle(1, 0xf00000);
        layerDraw.graphics.moveTo(pointFrom.x, pointFrom.y);
        layerDraw.graphics.lineTo(pointTo.x, pointTo.y);
}
 
function addNewLine():void
{
        layerDraw.graphics.clear();
        layerCanvas.graphics.lineStyle(3, 0x70f000);
        layerCanvas.graphics.moveTo(pointFrom.x, pointFrom.y);
        layerCanvas.graphics.lineTo(pointTo.x, pointTo.y);
}



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

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