Как связать изображение с URL-адресом VR с помощью a-frame?

Решение

Чтобы распространить on_connect на все экраны, то есть MainPage и AboutPage. Подробнее см. В примере.

  1. Добавлены идентификаторы для MainPage и AboutPage
  2. Привяжите к ним обратные вызовы. Когда событие отправляется, ваши обратные вызовы будут вызываться с параметрами, относящимися к этому конкретному событию.
  3. return True, указывая, что мы потребляем прикосновение и не хотим, чтобы он распространялся дальше.
  4. Удалены коды в приложении (main.py) и добавлены некоторые в MainContainer.py

Примечание

Я прокомментировал return True, чтобы показать распространение события. Попробуйте uncomment return True, чтобы показать, что распространение остановлено.

Фрагменты

MainContainer

def __init__(self, **kwargs):
    super(MainContainer, self).__init__(**kwargs)
    self.register_event_type('on_connect')
    print(self.children)
    self.bind(on_connect=self.ids.main_page.on_connect)
    self.bind(on_connect=self.ids.about_page.on_connect)
...
def on_connect(self, *args):
    print("\nMainContainer.on_connect()")
    print("hello there")
    # return True   # indicating that we have consumed the touch and don’t want it to propagate any further.

Пример

main.py

from kivy.app import App
from kivy.config import Config
from MainPage import MainPage
from AboutPage import AboutPage
from MainContainer import MainContainer


class MyApp(App):

    def build(self):
        return MainContainer()


if __name__ == "__main__":
    MyApp().run()

my.kv

#:kivy 1.10.1
#:import CardTransition kivy.uix.screenmanager.CardTransition
#:set menucolor1 0, 0.603, 0.784, 1
#:set menucolor2 0, 0.203, 0.384, 1
#:set backgroundcolor 0.95, 0.95, 0.95, 1

:
    size_hint_y: None
    height: 50
    markup: True

:
    size_hint_y: None
    height: 3
    canvas.before:
        Color:
            rgba: menucolor1
        Rectangle:
            pos: self.pos
            size: self.size
:
    canvas.before:
        Color:
            rgba: backgroundcolor
        Rectangle:
            pos: self.pos
            size: self.size
    name: 'main_screen'
    Label:
        color: menucolor1
        text: "Hi I'm Main Screen"

:
    canvas:
        Color:
            rgba: backgroundcolor
        Rectangle:
            pos: self.pos
            size: self.size
    name: 'about_screen'
    Label:
        color: menucolor1
        text: "Hi I'm About Screen"


:
    manager: manager
    canvas:
        Color:
            rgba: backgroundcolor
        Rectangle:
            pos: self.pos
            size: self.size
    BoxLayout:
        size: root.size
        orientation: 'horizontal'
        BoxLayout:
            orientation: 'vertical'
            width: 150
            size_hint_x: None
            MenuButton:
                text: '[b]Main[/b]'
                on_press: root.switch_to('main_screen')
            MenuSpacer:
            MenuButton:
                text: "[b]About[/b]"
                on_press: root.switch_to('about_screen')
            MenuSpacer:
            MenuButton:
                text: "[b]DummyConnect[/b]"
                on_press:
                    root.on_session()
            Widget:
                canvas.before:
                    Color:
                        rgba: menucolor1
                    Rectangle:
                        pos: self.pos
                        size: self.size
        ScreenManager:
            id: manager
            transition: CardTransition(direction='right',mode='push',duration=0.2)

            MainPage:
                id: main_page

            AboutPage:
                id: about_page

MainContainer.py

from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty


class MainContainer(Widget):

    manager = ObjectProperty(None)

    def __init__(self, **kwargs):
        super(MainContainer, self).__init__(**kwargs)
        self.register_event_type('on_connect')
        print(self.children)
        self.bind(on_connect=self.ids.main_page.on_connect)
        self.bind(on_connect=self.ids.about_page.on_connect)

    def switch_to(self, name):
        self.manager.current = name

    def on_connect(self, *args):
        print("\nMainContainer.on_connect()")
        print("hello there")
        # return True   # indicating that we have consumed the touch and don’t want it to propagate any further.

    def on_session(self):
        print("session connected!")
        self.dispatch('on_connect')

MainPage.py

from kivy.uix.screenmanager import Screen


class MainPage(Screen):

    def on_connect(self, *args):
        print("\nMainPage.on_connect()")
        # return True   # indicating that we have consumed the touch and don’t want it to propagate any further.

AboutPage

]

from kivy.uix.screenmanager import Screen


class AboutPage(Screen):

    def on_connect(self, *args):
        print("\nAboutPage.on_connect()")
        # return True   # indicating that we have consumed the touch and don’t want it to propagate any further.

Выход

0
задан Bo Bennett 19 January 2019 в 14:52
поделиться

1 ответ

Вы можете проверить исходный код link , используя часть «link»

window.location = this.data.url;

и добавить его в компонент a-frame:

AFRAME.registerComponent("weblink", {
  schema: {
    url: {
      default: ""
    }
  },
  init: function() {
    this.el.addEventListener("click", (e) => {
      window.location = this.data.url;
    })
  }
})

при нажатии - изменить расположение окна на нужный URL. Бросьте его на любой объект aframe:

<a-box position="-1 0.5 -3" rotation="0 45 0" color="#4CC3D9" 
       weblink="url: https://google.com"></a-box>


Fiddle здесь , хотя вам нужно скопировать код в другом месте, так как jsfiddle не позволит изменить window.location на другой источник ,

0
ответ дан Piotr Adam Milewski 19 January 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: