Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Обработка команд пользователя
После отрисовки очередного кадра приложение считывает введенные с клавиатуры данные и движения мышью за время предыдущего кадра. В зависимости от того, выведен ли на экран блок с информацией может быть отключен или включен контроллер камеры. После чего вызывается метод проверки позиции наблюдателя для выгрузки и загрузки объектов аудиторий, где находится пользователь. Код представлен в листинге 5.21. Листинг 5.21 – Проверка на загрузку/выгрузку объектов if(logoVisible)
После чего происходит обсчет позиции наблюдателя относительно соседних объектов для вычисления столкновений пользователя с объектами. Для этого на месте контроллера камеры создается невидимая сфера, столкновение которой с окружающими объектами и будет определять поведение контроллера камеры. При столкновении учитывается вектор движения контроллера и, в зависимости от угла между вектором и поверхностью столкновения, рассчитывается скорость скольжения и расстояние смещения вдоль поверхности, с которой произошло столкновение. При угле 90ͦ оба эти параметра будут нулевые, то есть контроллер упрется в поверхность, с которой столкнулся и остановится. Код представлен в листинге 5.22. Листинг 5.22 – Определение столкновений var beginCameraVec: Vector3D = new Vector3D(camera.x, camera.y, camera.z). camera.y = endCameraVec.y. После вычисления новой позиции с учетом столкновения, контроллер перемещается в эту точку и следующий кадр будет отрисован с этой точки. При нажатии кнопок, запускаются их функции-обработчики. Для выведения текста отрисовывается его интерфейсный контейнер, а текст динамически загружается из текстового файла. Код представлен в листинге 5.23.
Листинг 5.23 – Вывод текста private function showAudInfo(e: MouseEvent): void{ var request: URLRequest = new URLRequest(url + ".txt"). loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler). function loaderCompleteHandler(event: Event): void { Для выведения видео создается объект специально написанного класса, который воспроизводит нужное поточное видео и покадрово возвращает bmp-картинку, которая используется как текстура и накладывается на виртуальный экран в 3D-мире. Код представлен в листинге 5.24. Листинг 5.24 – Создание текстуры из видео public function VideoMaterial (flvUrl: String) { connection.connect (null). protected function onConnected (e: NetStatusEvent): void { stream.client = { video = new Video. texture = new BitmapData (video.width, video.height, true, 0x00FFFFFF). protected function loopVideo (e: NetStatusEvent = null): void { Продолжение листинга 5.24 } Код отображения текстуры на объекте представлен в листинге 5.25. Листинг 5.25 – Отображение текстуры на объекте private var videoPlane: Plane = new Plane(200, 150). videoPlane.x = -200. videoPlane.rotationX = 90*Math.PI/180. videoPlane.visible = true. После чего видео проигрывается на висящем в пространстве экране.
|