Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.12.2013, 02:55
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 1  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
По умолчанию Слежение глаз за курсором.

Разбираю пример слежения глаз за курсором http://www.youtube.com/watch?v=gBOa06lcRWA. Как и в примере создаю глаза и зрачок:



В первом кадре пишу код:
Код AS3:
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;
}
Всё работает без проблем. Координаты зрачков (pupil) меняются примерно от -3 до 3.

Теперь пытаюсь прописать функцию в классе:
Код AS3:
// ОСНОВНОЙ КОД 
// ГДЕ-ТО В КОДЕ
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;
}
Глаза добавляются на сцену с помощью addChild.
Меняю pupil на полный путь к мувклипу c_embryoEyes.c_embryoEye.pupil. Перестаёт работать. Координаты зрачков доходят только от 3 до 0. Получается так, что зрачки не делают полный оборот в глазу. В каком направлении можно копать? Запутался.

Старый 27.12.2013, 03:51
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Теперь пытаюсь прописать функцию в классе:
А где класс? Покажите полный код
__________________
Марк Tween

Старый 27.12.2013, 04:31
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 3  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
Код AS3:
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.
Старый 27.12.2013, 06:00
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 4  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
скорее всего потому , что если пишете этот код в первом кадре, то mouseX/Y берется относительно stage, когда же переносите в класс, то mouseX беретсся относительно самого этого класса, нужно делать что-то вроде, чтобы сделать глобальные координаты.
Код AS3:
 
var angle = Math.atan2(mouseY+this.y, mouseX + this.x);
опять же зависит как глубоко у вас лежит этот класс

Старый 27.12.2013, 06:10
dendead вне форума Посмотреть профиль Отправить личное сообщение для dendead Найти все сообщения от dendead
  № 5  
Ответить с цитированием
dendead

Регистрация: Aug 2013
Сообщений: 73
Сами глаза находятся тут:
Код AS3:
addChild(sprite1);
sprite1.addChild(mEyes);
А зрачок:
Код AS3:
mEyes.eye.pupil
Хм, а сам класс где лежит...

А если указать в первом кадре
Код AS3:
stage.mouseY и stage.mouseX
как раз повторяется ситуация при добавлении в класс...

Тогда возникает вопрос: какие координаты mouseX и mouseY фигурируют в коде при добавлении в кадр на timeline?

Добавлено через 29 минут
Всё, разобрался!
Поставил mEyes.eye.mouseY и mEyes.eye.mouseX и всё заработало. То есть mouseY и mouseX из того места, откуда они берутся при добавлении кода на timeline.

Добавлено через 31 минуту
Огромное спасибо за помощь в очередной раз.


Последний раз редактировалось dendead; 27.12.2013 в 06:29.
Создать новую тему Ответ Часовой пояс GMT +4, время: 08:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:19.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.