Сохранение x и y шнуров в качестве переменных по щелчку мыши - PullRequest
0 голосов
/ 07 января 2012

У меня есть кусок кода, который создает круги в функции mouseDown.Я пытаюсь сохранить x и y шнуры кругов, но не могу найти способ обойти это.Мне нужно сохранить несколько экземпляров шнуров из mouseDown.

Возможно ли сделать это в массиве?

PS Я не ищу никого, кто бы отправил код или что-то ещеПросто совет, пожалуйста.Или предложения будут с благодарностью: Я использую AS3, и я довольно новичок в этом.

var posOne:Number;
//var posTwo:Number;
//var posThree:Number;
//var posFour:Number;
//var posFive:Number;



import flash.events.MouseEvent;





stage.addEventListener(MouseEvent.MOUSE_DOWN,startDoodle);
stage.addEventListener(MouseEvent.MOUSE_UP,stopDoodle);

    function startDoodle(e:MouseEvent):void{
    stage.addEventListener(MouseEvent.MOUSE_DOWN,makeTarget);
}




function stopDoodle(e:MouseEvent):void{

    stage.removeEventListener(MouseEvent.MOUSE_UP,makeTarget);

}





import flash.events.MouseEvent;


function makeTarget(e:MouseEvent):void {

var ellipse:Ellipse = new Ellipse (15,15, 0x00ff00);
addChild (ellipse);
ellipse.x = mouseX;
ellipse.y = mouseY;

//posOne == ellipse.x && ellipse.y


}

Ответы [ 2 ]

1 голос
/ 07 января 2012

Самый простой способ сделать это - создать Point объекты с x и y координатами щелчка мыши и поместить их в массив.

function onMouseClick(event:MouseEvent):void
{
    var mousePoint:Point = new Point(stage.mouseX, stage.mouseY);
    mouseClicks.push(mousePoint);
}

Если вам нужно сохранить множество этих типов координат, и вы беспокоитесь о производительности или памяти, вы можете сохранить представления строк координат со строками в определенном формате, содержащем определенные разделители, такие как 85|56$104|77$..., таким образом, вы будет знать, что каждый набор значений x и y ограничен одним символом, а значения x и y в пределах набора разделены другим разделителем. Лучший способ сохранить эти данные в памяти - ограничить ввод 16-разрядными целыми числами и затем сохранить оба значения в 32-разрядном целом (например, значение x в первых 16 битах и ​​значение y в последних 16 битах, например). ) с помощью побитовых операций.

0 голосов
/ 07 января 2012

Я думаю, что на самом деле легче увидеть в коде, чем объяснить. Не то, чтобы вы не читали об использовании точек мыши, но для обзора приведенный ниже код должен дать вам довольно хорошее начало использования точек, учитывая то, что у вас есть выше. Пожалуйста, смотрите комментарии для деталей.

// It helps to keep all the imports at hte top of your file, for easy code reading.

import flash.events.MouseEvent;
import flash.geom.Point;

// It helps to keep all class-level variables at the top of the file.

// Make an array rather than many individual variables.  That way you can use a for-loop to access the items.
// (The brackets "[]" are equivalent to new Array().)
var localPosArray:Array = [];
var globalPosArray:Array = [];
var ellipseArr:Array = [];

// can use these as temporary variables:
var localPoint:Point;
var globalPoint:Point;

// stores currently active ellipse index:
var curEllipseIdx:int;

// stores currently active point index:
var curPtIdx:int;

// store click count:
// (You could use an array instead, but probably not necessary.)
var countTotal:int = 0;

// Probably not needed:
// var posOne:Number;
//var posTwo:Number;
//var posThree:Number;
//var posFour:Number;
//var posFive:Number;

stage.addEventListener(MouseEvent.MOUSE_DOWN, startDoodle);
stage.addEventListener(MouseEvent.MOUSE_MOVE, sizeDoodle);
stage.addEventListener(MouseEvent.MOUSE_UP, stopDoodle);

function startDoodle(ev:MouseEvent):void
{
    // count clicks (mouse downs):
    countTotal++;

    // to find the coordinates on the local object -- this is usually different from the global coordinates.
    curPtIdx = localPosArray.length;
    localPosArray[curPtIdx] = new Point(ev.localX, ev.localY);

    // alternately, to overwrite a current point:
    //   curPtIdx = 0;
    //   localPosArray[curPtIdx] = new Point(ev.localX, ev.localY); // the old value will be garbage collected, if there are no other references.

    // to convert from local to global coordinates:
    //   curPtIdx = 0;
    //   globalPoint = localToGlobal(localPosArray[curPtIdx]);


    // alternately, to find the coordinates on the global object (the stage):
    curPtIdx = globalPosArray.length;
    globalPosArray[globalPosArray.length] = new Point(ev.stageX, ev.stageY);

    // alternately, to overwrite a current point:
    //   curPtIdx = 0;
    //   globalPosArray[curPtIdx] = new Point(ev.stageX, ev.stageY); // the old value will be garbage collected, if there are no other references.

    // to convert from local to global coordinates:
    //   curPtIdx = 0;
    //   localPoint = globalToLocal(globalPosArray[curPtIdx]);


    //You do not need to stop listening for mouse *down*, since that can never happen when the mouse is down. 
    // stage.addEventListener(MouseEvent.MOUSE_DOWN, makeTarget);
}

function stopDoodle(e:MouseEvent):void
{
    //You do not need to stop listening for mouse *up*, since that can never happen when the mouse is up. 
    //stage.removeEventListener(MouseEvent.MOUSE_UP, makeTarget);
}

function makeTarget(e:MouseEvent):void
{
    curPtIdx = 0;
    curEllipseIdx = ellipseArr.length;
    ellipseArr[curEllipseIdx] = new Ellipse(localPosArray[curPtIdx].x, localPosArray[curPtIdx].x, 0x00ff00);
    addChild(ellipseArr[curEllipseIdx]);

    // These lines are probably not necessary:
    //ellipse.x = mouseX;
    //ellipse.y = mouseY;

    // What is this for?
    //posOne == ellipse.x && ellipse.y
}

function sizeDoodle(ev:MouseEvent):void
{
    if (ellipseArr && ellipseArr[curEllipseIdx])
    {
        // size the ellipse by the distance from the initial point:
        // however you might do that.
    }
}
...