Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Papervision] Интерактивный глобус (http://www.flasher.ru/forum/showthread.php?t=127026)

Dzo 02.07.2009 23:28

Интерактивный глобус
 
Добрый день!

Намутил я значит вот такой глобус: http://jvoliz.info/iGem/test.swf

ВНИМАНИЕ: Весит много - 1 мегабайт и требует новую версию flash'a (мне для огненной лисы пришлось скачать свежий плагин).

Ничего такой глобус вроде : )

Вопрос: как сделать, каждую (ну не каждую, а хотя бы десяток) стран интерактивными. То есть я подвожу мышкой к стране, ее контуры подсвечиваются или просто, чтобы я мог кликнуть по стране на глобусе и получить какое-то действие.

Я много гуглил и ничего дельного не нашел.

Была идея, чтобы по координатам добавить на нужную мне страну какой-нибудь объект - например, полусферу, и использовать ее как триггер для совершения события, но почему-то если создавать DisplayObject3D, то к нему никак не привязать события, хоть ты тресни.

Собственно ряд вопросов:

* если взаимодействовать не напрямую с картой глобуса, а утыкать его какими-нибудь посторонними маркерами, то как привязать к DisplayObject3d событие. Чувствую, что никак, поэтому как сделать тоже самое, но без DisplayObject3D?

* Если все-таки хочется "порезать" карту на нужные мне участки и к каждому привязать ивент, как сделать?

* Вообще, как создать фигуру со сложным контуром и добавить ее в сцену?

Спасибо!

JD

Mur4ik 03.07.2009 05:15

События привязываются через InteractiveScene3DEvent

Вот еще некий пример почти по теме

А вообще, кажется, слишком сложную для себя Вы задачу выбрали для начала.

2morrowMan 03.07.2009 12:27

Что с управлением ? Оно для дистрофиков ? :)

Dzo 03.07.2009 12:44

Нормальную задачу! Дайте направление куда копать и мы раскопаем!

А что с управлением?

JD

Mur4ik 03.07.2009 15:42

Я Вам уже дал направление куда копать.
Начните с документации, конкретнее обратите внимание на классы:
InteractiveScene3DEvent
InteractiveSceneManager
InteractiveUtils
Mouse3D

Вообщем то способов добиться того чего вы хотите есть несколько. Самый простой это MovieMaterial, т.е материал в виде мувиклипа интерактивного, но на производительности это сказывается не очень то положительно. Дальше уже варианты посложнее, ройте.

А на счет управления почитайте про Quaternion и что такое Gimble lock

yorlin 03.07.2009 16:06

Да с управлением норм, только как то когда тянешь вниз глобус он вращается вверх, да и текстура, как всегда кольчужно на полюсах накладывается...(((
Smooth установил? а то какой то на краях ребристый...

ЛяЛя 07.09.2010 23:18

здравствуйте! вот возникла такая же задача. натянула на сферу интерактивный мувиклип, все отлично но почему то кнопки не срабатывают.
Код AS3:

Material=new MovieMaterial(l);
                        Material.opposite=true;
                        Material.animated=true;
                        Material.smooth=true;
                        Material.interactive = true ;
                        Material.allowAutoResize =true;

в чем может быть причина. Материал, то есть swf с картой мира написан на actionscript2.

3Desian 01.10.2010 11:23

Если на Вашем 3Д объекте натянут MovieMaterial и Вы хотите , что бы на нём работали кнопки, то нужно проделать следующее:
1. В самом мувике (movie) подписать кнопку (But_1) на события в кадре где она расположена .
2.Создать там же обработчик события в котором при помощи dispatchEvent выпустить событие "WasClick".
Код AS3:

But_1.addEventListener(MouseEvent.MOUSE_OVER, functionClick);
function functionClick(event:MouseEvent):void
{
  dispatchEvent(new MyEvent("WasClick"));
}

3. Подписать экземпляр объекта Этого мувика-текстуры на событие "WasClick".Это уже там , где создаёте материал MovieMaterial для объекта (для планеты).
Код AS3:

movie.addEventListener("WasClick", clickOnSomeBut);
private function clickOnSomeBut(e:MyEvent):void
{
trace("Дааа!!! ");
}

Ах да, ещё необходимо создать свой класс и назвать его MyEvent.as
Код AS3:

package
{
        import flash.events.Event;
 
        public class MyEvent extends Event
    {
                public var nameOfObject:String;
                public static var GO_TO_OBJECT:String="GO_TO_OBJECT";
 
                public function MyEvent(type:String, NameOfObject:String="")
                {
                super(type);
 
                nameOfObject = NameOfObject;
        }
 
        }
}
// тут параметр NameOfObject можно использовать для опознавания конкретно нажатой кнопки.



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

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