![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
Объясните, почему trace отображается все время, а play через раз?
На сцену добавляется три кнопки-позиции и указатель. При клике по кнопкам указатель будет перемещаться (анимация внутри указателя, своя для каждой позиции) Но пока проблема с проигрыванием анимации - пропуск каждого второго клика. package src { import flash.display.MovieClip; import flash.display.DisplayObject; import flash.events.MouseEvent; public class Main extends MovieClip { private var pointer:Pointer = new Pointer(); private var startRoom:StartRoom = new StartRoom(); private var leftRoom:LeftRoom = new LeftRoom(); private var rightRoom:RightRoom = new RightRoom(); public function Main() { pointer.x = 250; pointer.y = 200; startRoom.x = 250; startRoom.y = 250; leftRoom.x = 50; leftRoom.y = 250; rightRoom.x = 450; rightRoom.y = 250; addChild(startRoom); addChild(leftRoom); addChild(rightRoom); addChild(pointer); startRoom.addEventListener(MouseEvent.CLICK, startRoomClick); leftRoom.addEventListener(MouseEvent.CLICK, leftRoomClick); rightRoom.addEventListener(MouseEvent.CLICK, rightRoomClick); } public function startRoomClick(event:MouseEvent):void {trace("startRoom"); pointer.play()} public function leftRoomClick(event:MouseEvent):void {trace("leftRoom"); pointer.play()} public function rightRoomClick(event:MouseEvent):void {trace("rightRoom"); pointer.play()} } } Последний раз редактировалось lesnoj; 14.07.2015 в 12:45. |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
С gotoAndPlay срабатывает на данном этапе, но задача чуть сложнее.
Внутри объекта Pointer содержится четыре анимации перемещения между тремя точками. После нескольких движений происходит сбой. Причем текущая позиция (pointer.pos) выводится корректно на любом шаге, но с анимацией творится чехарда. package src { import flash.display.MovieClip; import flash.display.DisplayObject; import flash.events.MouseEvent; public class Main extends MovieClip { private var pointer:Pointer = new Pointer(); private var startRoom:StartRoom = new StartRoom(); private var leftRoom:LeftRoom = new LeftRoom(); private var rightRoom:RightRoom = new RightRoom(); public function Main() { pointer.pos = "startRoom"; pointer.x = 250; pointer.y = 200; startRoom.x = 250; startRoom.y = 250; leftRoom.x = 50; leftRoom.y = 250; rightRoom.x = 450; rightRoom.y = 250; addChild(startRoom); addChild(leftRoom); addChild(rightRoom); addChild(pointer); startRoom.addEventListener(MouseEvent.CLICK, startRoomClick); leftRoom.addEventListener(MouseEvent.CLICK, leftRoomClick); rightRoom.addEventListener(MouseEvent.CLICK, rightRoomClick); } // Конец конструктора public function startRoomClick(event:MouseEvent):void { if (pointer.pos == "leftRoom") { pointer.gotoAndPlay("leftToStart"); pointer.pos = "startRoom"; trace("Текущая позиция: " + pointer.pos); } else if (pointer.pos == "rightRoom") { pointer.gotoAndPlay("rightToStart"); pointer.pos = "startRoom"; trace("Текущая позиция: " + pointer.pos); } else if (pointer.pos == "startRoom") { trace("Клик по себе. Текущая позиция: " + pointer.pos); }; } public function leftRoomClick(event:MouseEvent):void { if (pointer.pos == "startRoom") { pointer.gotoAndPlay("startToLeft"); pointer.pos = "leftRoom"; trace("Текущая позиция: " + pointer.pos); } else if (pointer.pos == "rightRoom") { trace("Не доступно. Текущая позиция: " + pointer.pos); } else if (pointer.pos == "leftRoom") { trace("Клик по себе. Текущая позиция: " + pointer.pos); }; } public function rightRoomClick(event:MouseEvent):void { if (pointer.pos == "startRoom") { pointer.gotoAndPlay("startToRight"); pointer.pos = "rightRoom"; trace("Текущая позиция: " + pointer.pos); } else if (pointer.pos == "leftRoom") { trace("Не доступно. Текущая позиция: " + pointer.pos); } else if (pointer.pos == "rightRoom") { trace("Клик по себе. Текущая позиция: " + pointer.pos); }; } } // Конец класса } |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
Цитата:
Уточните что значит чтобы она сбрасывалась? |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
Цитата:
Возможно я стараюсь решить задачу не самым подходящим способом. Тогда прошу подсказать. Я стараюсь реализовать перемещение между некоторым количеством точек. К примеру есть точки A, B и C, лежащие на одной плоскости. Начальная позиция указателя над точкой B. При клике по точкам происходит проигрывание анимации перемещения. Причем перемещение важно сделать именно анимацией а не программно. |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 27
|
Насчет этого я ошибся.
Но в вашем примере всего одна анимация и кадр reset имеет строку gotoAndStop(1) на нее ссылающуюся. Если анимаций больше, то в данном методе наверно придется использовать условие и ссылаться на первый кадр нужной анимации. Вообще эти манипуляции с reset это стандартное решение или что то вроде костыля? Почему анимация себя так ведет, где можно про это почитать? |
|
|||||
|
Да это костыль.
Суть вот в чём: Когда проигрывание переходит на пустой кадр (reset), все вложенные клипы с анимацией удаляются. Снова вернувшись на первый кадр (gotoAndStop(1)), эти клипы заново создаются. Перейдя на пустой кадр, можно таким образом устроить сброс. Команда gotoAndStop(1) не позволяет отрисоваться пустому кадру, так как при переходе на него сразу же происходит переход на 1 кадр. Это совсем не тривиальное решение. Можно ещё рекурсивной функцией пройтись по всем мувиклипам и вызвать gotoAndStop(1). Тоже самое по сути будет. Вообщем, конечно всё это можно сделать красивее и аккуратнее. Но я не знаю, как у вас устроена анимация. Вы задали вопрос, как сделать так, чтоб при каждом вызове вложенная анимация проигрывалась заново, я предложил вам решение.
__________________
Дети не должны знать о своих родителях Последний раз редактировалось Tails; 12.07.2015 в 14:40. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|