Студия Sceneform ARCore Android

Я разрабатываю приложение AR, которое позволяет перемещать мяч, проводя пальцем по экрану. Я могу обнаружить удар, но не уверен, как перемещать мяч. поэтому я хочу, чтобы мяч перемещался из одного положения в другое в зависимости от того, как долго проводится смахивание по экрану. поэтому, когда вы проводите пальцем по мячу, он перемещается, как будто его бросили.

Может ли кто-нибудь помочь мне с этим. Благодарность


person Exi-G    schedule 09.05.2019    source источник


Ответы (1)


Чтобы переместить рендеринг, вы можете удалить его в старой позиции и поместить в новую. Вот пример - это управляется кнопкой, а не смахиванием, но движение можно использовать аналогичным образом. Приведенный ниже код работает с текущим выбранным якорным узлом - то есть пользователь может выбирать разные узлы для перемещения.

        //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;
    }
person Mick    schedule 14.05.2019