Пусть линия привязывается к центру точки
Я делаю игру с сенсорным экраном, соединяющую точки, для моей стажировки в AS3, вот краткий пример моего игрового процесса:
- Пользователь выбирает уровень.
- Изображение / координаты с этого уровня загружаются, и изображение добавляется на сцену.
- Когда координаты точек загружены (XML), точки получают MovieClips (
circlePoint
прилагается к ним. Все эти мувиклипы имеют уникальное значение (circlePoint.id
) иMouseEvent.MOUSE_OVER
слушатель, который стреляетclickPoint()
, MovieClips получают в моемpointContainer
, - За моей мышью следует прямая линия, которая начинается с первой точки.
- Если мой
gameCounter
переменная такая же, как мувиклипid
линия будет привязана к точке, и после моей мыши начнется новая линия. Конечно, эта новая линия начинается с последней точки, которая была затронута.
Все это работает как шарм, но я сталкиваюсь с одной проблемой; если моя мышь сталкивается с MovieClip, линия привязывается к текущей позиции мыши. Эта позиция - угол моего circlePoint
и я хочу, чтобы это был центр. Поэтому я решил позволить новой линии начинаться в центре текущей точки. Но предыдущая строка все еще находится на углу circlePoint
а новый начинается в центре, выглядит не очень красиво. Я думал об уменьшении размера моих точек, но точки станут слишком маленькими для прикосновения, так как это игра с сенсорным экраном. Это то, что я написал до сих пор:
private function setStartPoint():void{
mouseLines.push(new Sprite);
stage.addChild(mouseLines[mouseLines.length-1]);
holderX = pointContainer.getChildAt(0).x;
holderY = pointContainer.getChildAt(0).y;
stage.removeEventListener(MouseEvent.CLICK, setStartPoint);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseFollower);
stage.addEventListener(MouseEvent.CLICK, clickPoint);
}
setStartPoint()
Функция срабатывает, когда все мувиклипы добавляются на сцену.
private function clickPoint(e:MouseEvent):void{
if(gameCounter == e.target.id){
holderX = e.target.x;
holderY = e.target.y;
mouseLines[mouseLines.length-1].graphics.lineTo(holderX, holderY);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseFollower);
gameCounter++;
mouseLines.push(new Sprite);
stage.addChild(mouseLines[mouseLines.length-1]);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseFollower);
}
}
clickPoint()
уволен MOUSE_OVER
как указано выше.
private function mouseFollower(e:MouseEvent):void{
mouseLines[mouseLines.length-1].graphics.clear();
mouseLines[mouseLines.length-1].graphics.lineStyle(5,0x0000FF);
mouseLines[mouseLines.length-1].graphics.moveTo(holderX, holderY);
mouseLines[mouseLines.length-1].graphics.lineTo(mouseX, mouseY);
mouseLines[mouseLines.length-1].mouseEnabled = false;
}
mouseFollower()
функция рисует линию на MOUSE_MOVE
, А также mouseEnabled
конечно, установлен на false, поэтому он не кликабелен.
Любая помощь будет оценена.
1 ответ
Я чувствую, что то, что вы пытаетесь сделать здесь, сравнимо с рисованием произвольной формы в графической программе (такой как Photoshop). Поэтому я думаю, что вы делаете вещи сложными для себя. Вы можете просто иметь центр кругов как векторы и затем провести линию между ними. Тогда вы могли бы легко сказать что-то вроде.
private function mouseFollower(e:MouseEvent):void{
if(e.Hittest){
DrawLine(lastVector,curVector);
}
}
(это псевдокод так.)