Как добавить прослушиватель касаний на дочерних узлах ModelNode?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как добавить прослушиватель касаний на дочерних узлах ModelNode?

Сообщение Anonymous »

В настоящее время я работаю над приложением AR для Android с Kotlin и JetPack Compose, используя SceneView для AR и 3D-рендеринг.
Проблема
В какой-то момент мне нужно отобразить 3D-модель, в которой есть определенные узлы, взаимодействия с которыми я хочу прослушивать. Поэтому я добавил событие onSingleTapUp в конкретный дочерний узел. Это событие никогда не запускается. Я провел еще несколько проверок и предполагаю, что проблема в том, что GestureListener обнаруживает только первый узел, на который попадает луч.
Кто-нибудь знает, как решить эту проблему?
Мой код:

Код: Выделить всё

val modelNode = ModelNode(
modelInstance = modelLoader.createModelInstance(assetFileLocation = mainModel),
scaleToUnits = 0.21f,
centerOrigin = Position(0f)
).apply{
setPriority(0) // set Priority to 0 for preferring hit tests on other nodes
position = Position(0.21f/2,0f,0.29f/1.5f)
rotation = Rotation(0f, -120f, 0f)
Log.d("NodeDebug", "Creating FinalModelExperienceNode with size: $size at position: $position")
}

//intially hide all nodes but the 'BikeFull'-Node
modelNode.nodes.entries.forEach { entry ->
// Always show the BikeFull node
if (entry.key.contains("BikeFull")) {
entry.value.isVisible = true
Log.d("NodeDebug", "entry: ${entry.key}, ${entry.value}")
} else {
entry.value.isVisible = false
}
}

//set visibillity and animations for reward nodes
experienceState.rewards.forEachIndexed { index, reward ->
val rewardNode = modelNode.nodes.entries.find { it.key == reward.standardNode }
val rewardNodePuls = modelNode.nodes.entries.find { it.key == reward.blinkingNode }
if (rewardNode != null && rewardNodePuls != null) {
if(reward.display == RewardDisplay.VISIBLE){
rewardNode.value.isVisible = true
rewardNodePuls.value.isVisible = false
}
if(reward.display == RewardDisplay.INVISIBLE){
rewardNode.value.isVisible = false
rewardNodePuls.value.isVisible = false
}
if(reward.display == RewardDisplay.BLINKING) {
var isBlinking = true
rewardNode.value.isVisible = true
rewardNodePuls.value.isVisible = true
rewardNodePuls.value.childNodes.forEach {
it.isVisible = true
}
rewardNode.value.onSingleTapUp = { // 
Log.d("NodeDebug", " onSingleTapUp Node: $node")
}
),
...
)
Он всегда просто регистрирует синглTapUp для ModelNode, поэтому конкретное событие для дочернего узла ModelNode не запускается


Подробнее здесь: https://stackoverflow.com/questions/787 ... -modelnode
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Изменение стиля на узлах Vue-Flow не работает на пользовательских узлах
    Anonymous » » в форуме CSS
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Может ли динамически динамически обновить данные Osgearth :: ModelNode обновить вершину?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Может ли динамически динамически обновить данные Osgearth :: ModelNode обновить вершину?
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • «Невозможно найти EventEmitter для полученных касаний» при использовании RecyclerView внутри собственного компонента пол
    Anonymous » » в форуме Android
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Счетчик касаний мультитач
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»