![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2015
Сообщений: 64
|
Доброго времени суток.
Возникла проблема в следующем участке кода: package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.utils.setInterval; import flash.display.Shape; public class Square extends Sprite{ private var shape:Shape; public function Square(){ stage.addEventListener(MouseEvent.CLICK, addShapeListener); } private function addShapeListener(e:MouseEvent):void{ shape = new Shape(); shape.graphics.lineStyle(1); shape.graphics.beginFill(0x000000); shape.graphics.drawRect(mouseX, mouseY, 80, 80); addChild(shape); setInterval(moveShape, 60); function moveShape(){ shape.x = mouseX; shape.y = mouseY; } } } } А если я выбрал совсем неудачный способ перемещения объекта shape, подскажите пожалуйста что-нибудь более подходящее. |
|
|||||
|
На самом деле никуда он не смещается не так. Форма заполняется относительно неправильной точки
надо не а И вообще setInterval() лучше не использовать. Слушатели лучше вашать явно. И этот шейп смещать либо по энтер фрейму, либо по mouseMove |
|
|||||
|
Регистрация: Mar 2015
Сообщений: 64
|
Я пробовал вариант:
Но вот появляется проблема: объект shape сперва появляется в верхнем левом углу экрана, а потом резко перемещается в точку курсора. Получается неприятное глазу "дергание". Правда такое происходит только с первыми добавляемыми фигурами, а потом этот эффект пропадает и объект появляется в точке курсора. Не пойму почему так происходит. А насчет явного использования слушателей: мне показалось что задача слишком простая, чтобы ради неё создавать отдельный таймер явно. Вам не кажется что так этот фрагмент кода легче понять? Добавлено через 7 минут Насчет MOUSE_MOVE, если это то, о чем вы говорите. В дальнейшем я изменю код так, что объект будет появляться при нажатии на кнопке. Создавать слушатель CLICK для кнопки, а потом слушатель для объекта MOUSE_MOVE мне кажется неудобно. |
|
|||||
|
Нужно поместить объект на место сразу после добавления на стейдж или перед добавлением
package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.utils.setInterval; import flash.display.Shape; public class Square extends Sprite{ private var shape:Shape; public function Square(){ stage.addEventListener(MouseEvent.CLICK, addShapeListener); } private function addShapeListener(e:MouseEvent):void{ shape = new Shape(); shape.graphics.lineStyle(1); shape.graphics.beginFill(0x000000); shape.graphics.drawRect(mouseX, mouseY, 80, 80); moveShape(); //здесь addChild(shape); //moveShape(); или здесь. setInterval(moveShape, 60); function moveShape(){ shape.x = mouseX; shape.y = mouseY; } } } } И не забывайте про .endFill(); |
|
|||||
|
Регистрация: Mar 2015
Сообщений: 64
|
Насчет смещения объекта shape от курсора мыши. Проблема в этом участке кода:
положения курсора, значение которого сохраняется в переменных mouseX, mouseY, рассчитывается не относительно начало координат сцены, а относительно местоположения кнопки. Подскажите пожалуйста, как сделать так, чтобы положения курсора, значение которого сохраняется в переменных mouseX, mouseY рассчитывалось относительно начала координат сцены. |
|
|||||
|
зависит от структуры объектов. возможно надо перевести локальные координаты в глобальные или наоборот. localToGlobal, globalToLocal
|
![]() |
![]() |
Часовой пояс GMT +4, время: 04:54. |
|
|
« Предыдущая тема | Следующая тема » |
|
|