![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2013
Сообщений: 73
|
Разбираю пример слежения глаз за курсором http://www.youtube.com/watch?v=gBOa06lcRWA. Как и в примере создаю глаза и зрачок:
![]() В первом кадре пишу код: import flash.events.Event; const THRESHOLD = 200; // every frame, make the pupil look at the mouse addEventListener(Event.ENTER_FRAME, lookAtMouse); // explain lookAtMouse function lookAtMouse(e:Event) { var angle = Math.atan2(mouseY, mouseX); // ПРОВЕРЯЮ КООРДИНАТЫ trace(pupil.x); pupil.x = Math.cos(angle) * 8; pupil.y = Math.sin(angle) * 8; } Теперь пытаюсь прописать функцию в классе: // ОСНОВНОЙ КОД // ГДЕ-ТО В КОДЕ addEventListener(Event.ENTER_FRAME, lookAtMouse); // ЧУТЬ ДАЛЬШЕ В КОДЕ function lookAtMouse(e:Event) { var angle = Math.atan2(mouseY, mouseX); c_embryoEyes.c_embryoEye.pupil.x = Math.cos(angle) * 8; c_embryoEyes.c_embryoEye.pupil.y = Math.sin(angle) * 8; } Меняю pupil на полный путь к мувклипу c_embryoEyes.c_embryoEye.pupil. Перестаёт работать. Координаты зрачков доходят только от 3 до 0. Получается так, что зрачки не делают полный оборот в глазу. В каком направлении можно копать? Запутался. |
|
|||||
|
Регистрация: Aug 2013
Сообщений: 73
|
package monsters { import flash.events.*; import flash.display.*; public class MouseFollowing extends Sprite { public static const THRESHOLD = 200; private var c_embryoEyes:MovieClip; public function MouseFollowing( ):void { // every frame, make the pupil look at the mouse addObject( ); addEventListener(Event.ENTER_FRAME, lookAtMouse); } public function addObject( ):void { addChild(c_embryoEyes); } // explain lookAtMouse public function lookAtMouse(e:Event) { // get the angle to the mouse var angle = Math.atan2(mouseY, mouseX); // get the distance - pythagoras var distance = Math.sqrt((mouseX*mouseX) + (mouseY*mouseY)); if (distance > THRESHOLD) distance = THRESHOLD; // move the pupil in that direction, starting from 0, 0 var desiredX = Math.cos(angle) * 4; var desiredY = Math.sin(angle) * 4; desiredX *= (distance / THRESHOLD); desiredY *= (distance / THRESHOLD); // ease to the position, instead of snapping c_embryoEyes.c_embryoEye.pupil.x += (desiredX - c_embryoEyes.c_embryoEye.pupil.x) * 0.2; c_embryoEyes.c_embryoEye.pupil.y += (desiredY - c_embryoEyes.c_embryoEye.pupil.y) * 0.2; } } } Последний раз редактировалось dendead; 27.12.2013 в 04:44. |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
скорее всего потому , что если пишете этот код в первом кадре, то mouseX/Y берется относительно stage, когда же переносите в класс, то mouseX беретсся относительно самого этого класса, нужно делать что-то вроде, чтобы сделать глобальные координаты.
опять же зависит как глубоко у вас лежит этот класс |
|
|||||
|
Регистрация: Aug 2013
Сообщений: 73
|
Сами глаза находятся тут:
А зрачок: Хм, а сам класс где лежит... А если указать в первом кадре как раз повторяется ситуация при добавлении в класс... Тогда возникает вопрос: какие координаты mouseX и mouseY фигурируют в коде при добавлении в кадр на timeline? Добавлено через 29 минут Всё, разобрался! Поставил mEyes.eye.mouseY и mEyes.eye.mouseX и всё заработало. То есть mouseY и mouseX из того места, откуда они берутся при добавлении кода на timeline. Добавлено через 31 минуту Огромное спасибо за помощь в очередной раз. Последний раз редактировалось dendead; 27.12.2013 в 06:29. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|