Делаю сенсорный экран подключить самые точки игр для моей стажировки в AS3, вот быстрое воплощение моей игры поток:Пусть линия привязки к центру точки
- Пользователь выбирает уровень.
- Изображение/координаты с этого уровня загружаются, и изображение добавляется на сцену.
- Когда координаты точек загружаются (XML), точки получают MovieClips (
circlePoint
), прикрепленные к ним. Все эти MovieClips имеют уникальное значение (circlePoint.id
) и слушательMouseEvent.MOUSE_OVER
, который запускаетclickPoint()
. MovieClips попадают в мойpointContainer
. - Прямая линия следует за моей мышью, которая начинается с первой точки.
- Если моя переменная
gameCounter
совпадает с переменной MovieClipid
, линия будет привязана к точке, и новая строка начнет следовать за моей мышью. Конечно, эта новая линия начинается с последней точки, которая была затронута.
Все это работает как шарм, но я столкнулся с одной проблемой; если моя мышь сталкивается с 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()
функция срабатывает, когда все MovieClips добавляются на сцену.
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, поэтому он не доступен для кликов.
Любая помощь будет принята с благодарностью.
Я понимаю, что вы имеете в виду. Оцените пример, не относящийся к псевдокоду, но я могу попытаться выяснить это сам. –