Как создать кнопку рамки

Кто-нибудь знает как создать кнопку в aframe


person Emmanuel Ogba    schedule 17.08.2016    source источник
comment
Что вы имеете в виду (кнопка для контроллеров Vive? Геймпад? Мышь?) И что вы пробовали до сих пор? Использование компонента курсора A-Frame с любым объектом позволяет выполнять JavaScript при щелчке по этому объекту.   -  person Don McCurdy    schedule 17.08.2016
comment
я имею в виду как тег кадра, который вы можете использовать для создания кнопок, загружающих новый экран. И лучшее, что я мог получить, - это сделать это с помощью картинки.   -  person Emmanuel Ogba    schedule 17.08.2016
comment
Верно, но если то, что вам нужно, не является изображением, похожим на кнопку, какую кнопку вы выберете? Как небольшой трехмерный цилиндр, который слегка перемещается при нажатии? А вы уже разобрались с загрузками новой части экрана? Ваш вопрос довольно расплывчатый, извините.   -  person Don McCurdy    schedule 17.08.2016
comment
Думаю, я мог бы попробовать цилиндр, и да, я уже знаю, как заставить его загружать новый экран   -  person Emmanuel Ogba    schedule 17.08.2016


Ответы (2)


Один из способов создать кнопку с A-Frame - использовать примитив <a-box> в сочетании с курсором. Ниже приводится простая демонстрация:

<a-scene>
    <a-entity position="0 .6 4">
        <a-camera>
            <a-entity id="mycursor" cursor="fuse: true; fuseTimeout: 500; max-distance: 30;"
            position="0 0 -5"
            geometry="primitive: ring"
            material="color: blue; shader: flat">
            </a-entity>
        </a-camera>
    </a-entity>

    <!-- "button" -->
    <a-entity id="refresh-button" geometry="primitive: box" material="color: red" position="0 0 -2"></a>
</a-scene>

<script>
    document.querySelector('#refresh-button').addEventListener('click', function() {
        // Refresh stuff would go here!
    });
</script>

Когда курсор фокусируется на «кнопке», срабатывает событие click. Чтобы добавить текст к кнопке, вы можете использовать этот компонент:

https://github.com/ngokevin/aframe-text-component

Наконец, если вы ищете более традиционную «кнопку», вы можете просто разместить элемент <button> над холстом или iframe, если вы встраиваете.

person David Walsh    schedule 17.08.2016
comment
Если вы хотите, чтобы кнопка была интегрирована в сцену, плавающая кнопка не будет работать, поскольку она не будет отображаться на гарнитурах VR и не будет затенена. И github.com/bryik/aframe-bmfont-text-component является отличное текстовое решение. - person ngokevin; 17.08.2016
comment
как насчет создания поля и размещения текста перед ним. - person Emmanuel Ogba; 18.08.2016
comment
Это сработало для меня. ‹Script src = raw.githubusercontent. com / gasolin / aframe-href-component / ›‹ тип скрипта = текст / javascript src = webvr.js ›‹/script›‹ скрипт src = rawgit.com/ngokevin/aframe-text-component/master/dist /› ‹/head› ‹body› ‹a-scene› ‹ширина окна a-box = 1 высота = 0,4 позиция = 0 0 0 глубина = 0,0 цвет = красный› ‹текст a-entity = текст: Что такое масштаб = 0,2 0,2 0,2 ​​цвет = синий цвет = -0,3 0,01 0 ›‹/a-entity› ‹/a-box› ‹/a-scene› - person Emmanuel Ogba; 18.08.2016

мне нравится https://www.npmjs.com/package/aframe-event-set-component для события наведения. И я даю своему курсору атрибут (данные доступны для щелчка), а затем я говорю, что Raycaster, он должен просто запускать объекты с этим атрибутом. Если вы хотите, чтобы что-то было просто кликабельным, если вы, например, входите в vr-режим, просто удалите атрибут dataclickable. Сцена выглядит так:

<a-scene cursor="rayOrigin: mouse" raycaster="objects: [data-clickable]">

        <a-image id="button" data-clickable visible="true" position="2 1.75 -0.2" height="0.5" width="0.5" rotation="0 90 0" onclick="dosomething()" event-set__enter="_event: mouseenter;  width: 0.53; height: 0.53;"
            event-set__leave="_event: mouseleave;  width: 0.5; height: 0.5;"></a-image>

    <a-camera>
      <a-cursor id="curseid" raycaster="objects: [data-clickable]"</a-cursor>
    </a-camera>

</a-scene>

Если вы хотите, чтобы кнопка работала, если что-то случилось, дайте ему атрибут позже:

document.getElementById('button').setAttribute('data-clickable', '');

Если вы закончили с кнопкой, используйте:

document.getElementById('button').setAttribute('visible', 'false');
document.getElementById('button').removeAttribute('data-clickable');

Если вы хотите, чтобы курсор просто запускал кнопку, если вы, например, входите в vr-режим, измените raycaster = "objects: .notclickable", а затем верните ему с этой строкой его атрибут:

document.getElementById('curseid').setAttribute('raycaster', 'objects: [data-clickable]');

На данный момент это мой способ делать кнопки, может быть, есть способ поумнее. Надеюсь, это немного помогло: D

person Delidragon    schedule 08.11.2018
comment
и я меняю сцены следующим образом: оберните все элементы одной сцены в a-entity, затем установите visible в false для одной оболочки и установите для нее visible = true на другой сцене, чтобы показать это. Не забудьте удалить атрибут data-clickable, иначе элементы будут просто невидимы, но все равно будут срабатывать. Возможно, также измените источник вашего a-sky, если вы воспользуетесь им для изменения окружающей среды. - person Delidragon; 08.11.2018