【问题标题】:Sceneform ARCore Android studioSceneform ARCore Android 工作室
【发布时间】:2019-09-27 20:18:27
【问题描述】:

我正在开发一款 AR 应用,可让您通过滑动屏幕来移动球。我能够检测到滑动,但我不确定如何移动球。所以我希望球根据屏幕滑动的时间从一个位置移动到另一个位置。所以当你刷球时,球就像被扔了一样移动。

谁能帮我解决这个问题。谢谢

【问题讨论】:

    标签: android-studio-3.0 arcore sceneform


    【解决方案1】:

    要移动可渲染对象,您可以在旧位置将其删除,然后将其放置在新位置。这是一个示例 - 这是按钮驱动而不是滑动驱动,但可以类似地使用移动。下面的代码适用于当前选择的anchorNode - 即用户可以选择不同的节点来移动。

            //Add a listener for the left button
            FloatingActionButton leftButtom = findViewById(R.id.left_button);
            leftButtom.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //Move the anchor left
                    Log.d(TAG,"Moving anchor left");
                    if (currentSelectedAnchorNode != null) {
                        //Get the current Pose and transform it then set a new anchor at the new pose
                        Session session = arFragment.getArSceneView().getSession();
                        Anchor currentAnchor = currentSelectedAnchorNode.getAnchor();
                        Pose oldPose = currentAnchor.getPose();
                        Pose newPose = oldPose.compose(Pose.makeTranslation(-0.05f,0,0));
                        currentSelectedAnchorNode = moveRenderable(currentSelectedAnchorNode, newPose);
                    }
                }
            });
    
        private AnchorNode moveRenderable(AnchorNode markAnchorNodeToMove, Pose newPoseToMoveTo) {
            //Move a renderable to a new pose
            if (markAnchorNodeToMove != null) {
                arFragment.getArSceneView().getScene().removeChild(markAnchorNodeToMove);
                anchorNodeList.remove(markAnchorNodeToMove);
            } else {
                Log.d(TAG,"moveRenderable - markAnchorNode was null");
                return null;
            }
            Frame frame = arFragment.getArSceneView().getArFrame();
            Session session = arFragment.getArSceneView().getSession();
            Anchor markAnchor = session.createAnchor(newPoseToMoveTo.extractTranslation());
            AnchorNode newMarkAnchorNode = new AnchorNode(markAnchor);
            newMarkAnchorNode.setRenderable(andyRenderable);
            newMarkAnchorNode.setParent(arFragment.getArSceneView().getScene());
            anchorNodeList.add(newMarkAnchorNode);
    
            return newMarkAnchorNode;
        }
    

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2017-07-21
      相关资源
      最近更新 更多